对JS的prototype的粗浅理解

  • 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(); // 错误

你可能感兴趣的:(对JS的prototype的粗浅理解)