组合模式和动态原型模式创建自定义对象

45次阅读

共计 733 个字符,预计需要花费 2 分钟才能阅读完成。

1. 组合模式

组合模式是目前使用最广泛,认同度最高的一种自定义对象的模式。
组合模式是将构造函数和原型继承相组合,使实例对象既可以共享相同的方法,自身的属性又不会互相影响。

    // 定制实例对象自身的属性
    function Person(name) {
        this.name=name;
        this.friends=['for'];

    }
    // 定制实例对象的共享属性和方法
    Person.prototype={
        // 改变原型对象的同时,要改变 constructor 指向,
        constructor:Person,
        // 共享方法
        sayName(){console.log(this.name);
        }
    }
    
    var p1=new Person('forceddd');
    var p2=new Person('bad');
    p1.sayName();
    console.log(p1.sayName===p2.sayName);//true

2. 动态原型模式

动态原型模式和组合模式非常类似,只不过它是根据是否创建了实例对象来动态的创建原型对象的共享方法的。

 // 动态原型模式
    function Dog() {
        this.name=name;
        this.friends=['for'];
        if(typeof this.sayName !='function'){// 说明此时对象有了实例,并且还没有 sayname 方法
            Dog.prototype.sayName=function () {console.log(this.name);
            }
        }
    }
    console.log(Dog.prototype);// 此时尚未有实例化对象 没有创建 sayname 方法
    var d=new Dog();// 有了实例化对象 创建了 sayname 方法
    console.log(d.sayName);//

正文完
 0