Skip to content

批量指定原型属性和方法 ​

本节目标:理解“批量指定原型属性和方法”的核心思路,并能把它用于实际开发或面试表达。 可以用一个包含所有属性和方法的对象字面量来重写整个原型对象,如下:

function Person() { }
Person.prototype = {
name: 'Nicholas',
age: 29,
job: 'Software Engineer',
sayName: function () {
console.log(this.name);
}
};

缺点:constructor属性不再指向Person了。这种写法,本质上完全重写了默认的prototype对象,因此constructor属性也就变成了新对象的constructor属性(指向Object构造函数)。此时,尽管instanceof操作符还能返回正确的结果,但通过constructor已经无法确定对象的类型了。

解决方法: 一、覆盖原型对象的时候,重新定义constructor属性的值:

function Person() { }
Person.prototype = {
constructor: Person,
name: 'Nicholas',
age: 29,
job: 'Software Engineer',
sayName: function () {
console.log(this.name);
}
};

二、为确保constructor保持不可枚举性,须使用ES5的引擎才有的

Objcect.defineProperty()

方法

;
Object.defineProperty(Person.prototype, 'constructor', {
  enumerable: false,
  value: Person
})

本站总访问 — 次