-
prototype
是指原型对象, 一个函数所有的实例都会指向它
- 非标准实例属性
__proto__
可从实例中访问prototype
- 一般来说:
Funtion Foo() {
this.prototype.xxx = xxx; // 这样虽然能修改原型, 但每次new一次Foo, 都会执行一次.
}
Foo.prototype.xxx = xxx; // 这样就只会执行一次, 靠谱, 但每个属性都要打这么长
Foo.prototype = { // 这种效果和上面的一样, 但写法更简洁
constructor: Person, // 不加这句的话, construtor将不会再指向Foo, 虽然没什么大问题, 但还是加上为好
xxx: xxx,
xxx, xxx
}
- 它自身有个
constructor
属性指向函数本身.
- 原型模式主要是用来解决属性/方法共享的, 若是不同实例间并不需要优化这个, 那直接在Funtion里面添加this的属性也没什么不妥.
- 实例中原型仅指向原型, 而不是指向构造函数.
- 重写原型对象后, 会切断之前所创建对象与新原型之间的联系.
function Person() {}
var friend = new Person();
Person.prototype = {
constructor: Person,
name: 'df',
age: 29,
sayName: function () {
alert(this.name);
}
}
friend.sayName(); // 错误