function Person (name) { var o = new Object(); o.name = name; o.sayName = function () { alert(this.name) }; return o } var p1 = new Person('jack'); //与工厂模式唯一不同之处:使用new调用 p1.sayName(); //jack
其实new不new都无所谓,因为我们已经显式的return o
那么寄生构造函数模式到底有什么应用场景呢?据《javascript高级程序设计》一书记载,举例:如果我们想创建一个具有额外方法的特殊数组,那么我们可以这样做:
function SpecialArray () { var values = new Array(); Array.prototype.push.apply(values,arguments); values.toPipedString = function () { return this.join('|') } return values } var colors = new SpecialArray('red','blue','green'); alert(colors.toPipedString()) //'red|blue|green'
最后重要的一点:该模式和构造函数和原型无缘,也就是不能区分实例类型,因为该模式生成的实例,它的构造函数都是Object,原型都是Object.prototype
稳妥构造函数模式
该模式与寄生构造函数相比,主要有两点不同:
1.创建对象实例的方法不引用this
2.不使用new操作符调用构造函数
按照稳妥构造函数的要求,可以将前面的Person构造函数重写如下:
function Person (name) { var o = new Object(); o.sayName = function () { alert(name) //这里其实涉及到了闭包的知识,因此产生了私有属性的概念 } return o }
此模式最适合在一些安全的环境中(这些环境中会禁止使用this和new),同理,此模式与构造函数和原型也无缘
结语
以上就是对js中创建对象的方式的总结,希望对大家有所帮助
这篇基于JS对象创建常用方式及原理分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章: