Appearance
动态原型模式
本节目标:理解“动态原型模式”的核心思路,并能把它用于实际开发或面试表达。 将构造函数的代码和定义构造函数型的代码分开写,是不合传统
OO语言封装的规范的。
思路: 动态原型模式它把所有代码都封装在构造函数中,通过检查某个应该存在的属性或方法是否存在,来决定是否需要初始化原型对象。如下:
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
//方法
if (typeof this.sayName != 'function') {
Person.prototype.sayName = function () {
console.log(this.name);
}
};
}
var friend = new Person('Nichlas', 29, 'Software Engineer');
friend.sayName();这里对原型所做的修改,能够立即在所有实例中得到反映。因此,这种方法确实可以说非常完美。其中,if语句检查的可以是初始化之后应该存在的任何属性或方法--不必用一大堆if语句检查生个属性和方法;只要检查其中一个即可。对于采用这种模式创建的对象,还可以使用instanceof操作符确定它的类型。
注意: 使用动态原型模式时,不能使用对象字面量重写原型。如果在已经创建实例的情况下重写原型,那么就会切断现在实例与新原型之间的联系。
