- Object 对象实例的原型对象链是最短的
- 原型对象链中的所有属性和方法会被构造函数的实例共享(继承)。
当我们访问对象的属性和方法时,首先在当前对象的属性列表中查找,如果找到则使用它。
如果找不到,则回去对象的原型对象中查找,如果找到,则使用它。
如果对象的原型对象中也没有,则会去原型对象的原型对象中查找。
以此类推,直到原型链的最顶端(Object.prototype)。
最终把原型对象链找遍了还是没有找到,如果你找的是一个属性的话,则返回 undefined,如果你找的是一个方法,则报错。
通过 Rectangle.prototyp 属性为原型对象添加新属性
Rectangle.prototype = {
getArea: function () {
return '矩形的面积为:' + this.height * this.width;
},
constructor: Rectangle,
__proto__
}
我们可以换一种方式为原型对象添加新属性,使用 Object.defineProperty() 方法添加属性
Object.defineProperty(Rectangle.prototype, 'getArea', {
enumerable: false,
configurable: false,
value: function () {
return '矩形的面积为:' + this.height * this.width;
},
writable: false
})
与其每次添加一个,不如直接使用一个新对象替换已有的对象
Rectangle.prototype = {
getArea: function () {
return '矩形的面积为:' + this.height * this.width;
},
getDiagonal: function () {
return '矩形的对角线长度为:' + Math.sqrt(this.width ** 2 + this.height ** 2);
},
constructor: Rectangle
};