ES5定义一个类的时候,一般都是如下例1的写法,为什么不用例2的写法?
例1:
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function () {
return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);
例2:
function Point(x, y) {
this.x = x;
this.y = y;
this.toString = function () {
return '(' + this.x + ', ' + this.y + ')';
};
}
var p = new Point(1, 2);
答:使用原型的本意就是为了继承,共用相同的方法或属性,如上例1的方式定义的类,new Point(1, 2) 时创建的对象,其方法在原型链上,所有使用new创建的对象都使用的是同一个原型对象,意味着所有方法在内存中只存在一份。而例2的方式定义的类,每次new的时候创建的对象本身都会自带toString方法,意味着所有的对象的toString方法是项目独立的,创建了多少对象,就有多少个toStirng函数,没有起到继承的作用。
结论:方法定义在原型上就是为了公用,节约内存资源。