寄生构造函数模式
创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象,从表面上看,这个函数像一个构造函数,但是只是一个普通的函数,封装了创建对象的代码而已;
理解寄生:
工厂模式寄生在构造函数内部;构造函数内部被工厂模式代码寄生了;创建对象代码寄生在构造函数内部,构造函数只是个躯壳
代码实例
function Person(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } return o; } var person1 = new Person('yangfch3', 21, 'UI Dev'); person1.sayName();注意点
- 除了使用
new操作符,并把使用的包装函数叫做构造函数外,这个模式与之前的工厂模式是一样的; - 通过在构造函数末尾添加一个
return语句,可以重写使用new调用构造函数时返回的值 - 返回的对象与构造函数或者与构造函数的原型属性之间没有关系,不能依赖
instanceof操作符来检测实例与构造函数的关系。
- 除了使用
寄生构造函数模式使用情景
当我们需要扩展原生构造函数的实例的属性和方法,在原生构造函数的记住上封装一个扩展版构造函数时使用
实例:创建一个具有额外方法的特殊数组
function SpecialArray() { // 创建数组 var values = new Array(); // 添加值 values.push.apply(values, arguments); // 添加额外方法 values.toPipedString = function() { return this.joib('|'); }; // 返回数组 return values; } var colors = new SpecialArray('red', 'blue'); colors.toPipedString();