基于JS对象创建常用方式及原理分析(3)

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

基于JS对象创建常用方式及原理分析

那么寄生构造函数模式到底有什么应用场景呢?据《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

基于JS对象创建常用方式及原理分析

稳妥构造函数模式

该模式与寄生构造函数相比,主要有两点不同:

1.创建对象实例的方法不引用this

2.不使用new操作符调用构造函数

按照稳妥构造函数的要求,可以将前面的Person构造函数重写如下:

function Person (name) {   var o = new Object();   o.sayName = function () {     alert(name) //这里其实涉及到了闭包的知识,因此产生了私有属性的概念   }   return o }

此模式最适合在一些安全的环境中(这些环境中会禁止使用this和new),同理,此模式与构造函数和原型也无缘

结语

以上就是对js中创建对象的方式的总结,希望对大家有所帮助

这篇基于JS对象创建常用方式及原理分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyffdz.html