function SpecialArray(){
var values = new Array();
values.push.apply(values, arguments);
values.toPipedString = function(){
return this.join("|");
}
return values;
}
var a = new SpecialArray(2,6,8,9,4);
a.toPipedString();
var b = SpecialArray(2,6,8,9,4);
b.toPipedString();
使用或不使用new好像并没有什么区别。
另外寄生构造函数可以做的工作,工厂模式也能实现;那这种寄生构造函数存在有什么意义?
寄生构造函数模式和工厂模式没有本质区别,通过new 操作符的就叫寄生构造函数模式,直接调用的就叫工厂模式
JS里的构造函数就是一个用来构造对象的普通函数,和JAVA不同
你要知道,通过new 来调用函数,会自动执行下面操作
创建一个全新的对象
这个对象会被执行[[prototype]]连接原型
函数调用中的this会绑定到新对象
如果函数没有返回其他对象,那么new 构造就会自动返回这个新对象
由于这里new调用和直接调用都返回values,所以a,b引用的数组对象是一样的
这里使用寄生构造函数的目的是希望扩展Array的一个方法toPipeMessage,作者本意是期望能像使用普通Array一样使用SpecialArray,故虽然把specialarray当成函数也一样能用,但是这并不是作者的本意,也变得不优雅。
寄生构造函数专门用来为js原生的构造函数定义新的方法。。
像上面的例子中,SpecialArray()
返回了一个对象values
,这个values
与Array
“唯一”的区别就是比Array
多了一个自定义的方法。。如果直接在Array
中定义新的方法,会污染其它的数组对象甚至造成不必要的麻烦。
【JavaScript】【对象】创建对象、对象继承的实用方式及理解。之前写的文章,总结了一下几种常用的创建对象、对象继承的方式。