JS对象创建方式有几种,优缺点是什么?
Admin 2022-12-02 群英技术资讯 573 次浏览
在JS开发中,如果要输入姓名、性别、年龄等信息,使用值类型存储,则必须声明多个变量,如果你声明更多的变量,就会造成变量污染,别着急,下面是JS中几种对象创建方法的优缺点比较,希望能帮到对此有需要的你。
1.工厂模式
function createObj(name, sex){ var obj = new Object(); obj.name = name; obj.sex = sex; obj.sayName = function(){ alert(this.name); } return obj; } var person = createObj('Tom', 'man');
缺点:①无法确定对象的类型(因为都是Object)。
②创建的多个对象之间没有关联。
2.构造函数
function createObj(name, sex){ this.name = name; this.sex = sex; this.sayName = function(){ alert(this.name); } } var person = new createObj('Tom', 'man');
缺点:①多个实例重复创建方法,无法共享。
②多个实例都有sayName方法,但均不是同一个Function的实例。
3.原型方法
function createObj(){} createObj.prototype.name = 'Tom'; createObj.prototype.sex = 'man'; createObj.prototype.sayName = function(){ alert(this.name); } var person = new createObj();
缺点:①无法传入参数,不能初始化属性值。
②如果包含引用类型的值时,改变其中一个实例的值,则会在所有实例中体现。
4.组合式(构造函数+原型方法)推荐使用
function createObj(name, sex){ this.name = name; this.sex = sex; } createObj.prototype.sayName = function(){ alert(this.name); } var person = new createObj('Tom', 'man');
优点:构造函数共享实例属性,原型共享方法和想要共享的属性。可传递参数,初始化属性值。
5.动态原型方法
function createObj(name, sex){ this.name = name; this.sex = sex; if(typeof this.sayName != 'function'){ createObj.prototype.sayName = function(){ alert(this.name); } } } var person = new createObj('Tom', 'man');
说明:if语句中只会调用一次,就是在碰到第一个实例调用方法时会执。此后所有实例都会共享该方法。在动态原型方法下,不能使用对象字面量重写原型。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了JavaScript队列数据结构详解,队列是一种先进先出的数据结构,队列中允许两种基础操作,也就是插入和删除,也就是入队和出队
这篇文章主要介绍了Vue中foreach数组与js中遍历数组的写法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
本文介绍的是关于React中this指向的内容,对于React中this指向问题下文有详细的介绍及解决方法供大家参考,需要的朋友可以了解看看,对大家学习React中this指向的内容有一定的参考价值。接下来我们就一起了解一下吧。
这篇文章主要介绍了linux服务器快速卸载安装node环境(简单上手),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要为大家详细介绍了小程序实现文字循环滚动动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008