JavaScript 创建对象 5 动态原型模式

动态原型模式,这种模式的目的是将原本独立的构造函数和原型进行整合封装。这样在构造函数中初始化原型(仅在必要的时候),换句话说,可以通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型。来看一个例子:

        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.friends = ["Toby", "Tina"];
            if (typeof this.sayName != "function") {
                Person.prototype.sayName = function() {
                    console.log(this.name);
                }
            }
            // 以下代码,确保通过 constructor 属性还能像之前的语法那样能够访问到适当的值
            Object.defineProperty(Person.prototype, "constructor", {
                                      enumerable: false,
                                      value: Person
                                  });
        }

        var person1 = new Person("Neo", 29, "Software Engineer");
        person1.sayName();

这段代码将输出:

JavaScript 创建对象 5 动态原型模式_第1张图片
输出结果

对应采用这种模式创建的对象,还可以使用 instanceof 操作符确定它的类型。

注意:使用动态原型模式时,不能使用对象字面量重写原型。因为,如果在已经创建了实例的情况下重写原型,那么就会切断现有实例与新原型之间的联系。

你可能感兴趣的:(JavaScript 创建对象 5 动态原型模式)