博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js创建对象的几种方式
阅读量:6526 次
发布时间:2019-06-24

本文共 1308 字,大约阅读时间需要 4 分钟。

1、通过new object方法或者字面量的方式创造对象

var obj = new Object()var obj1 = {}

缺点:创造多个key同,value不同的对象的时候会产生大量的重复代码(重复的书写key=value)

2、工厂模式

function  CreateObj(...arg){    let obj = new Object()    let attrs = ['a','b','c']    attrs.forEach((attr,index)=> {        obj[attr] = arg[index] || null    });    return obj    }

缺点:无法解决对象的识别问题(x.constructor === Object,x为工厂模式创建出来的对象)

3、构造函数模式(无法复用属性)与原型模式 (属性共享)

4、组合构造函数+原型模式

function People(name){     this.name = name}People.prototype.say = function(){    return 'hello'}

5、动态原型模式(更好的封装,把所有属性都放在一个方法内部)

function People(name,fn){    if(fn&& typeof fn !== 'function')throw 'fn must be a function'     this.name = name     if(!fn){         People.prototype.say = function(){             return 'hello'         }     }else{         this.say = fn     }}

6、Object.create(_pro_)

7、寄生构造函数(和工厂模式一样,只是调用方式上存在差异,就是在其他构造函数上的一个扩展,个人觉得没啥用)

function MyArray(){    let ary = new Array()    ary.test = function(){        alert(ary[0]||'没有值')    }    return ary}let myarry = new MyArray()myarry.test()

8、稳妥构造函数(内部不能使用this,私有属性不能定义在对象上,只能定义在方法内部,调用时不能用new)

function Student(name){    let obj = new Object()    let name = name //这里不能写为obj.name = name    obj.sayName = function(){        return name    }    return obj}let stu1 = Student('zale')

 

转载于:https://www.cnblogs.com/zale-blogs/p/9570072.html

你可能感兴趣的文章
分享一个帮助你在线测试响应式设计的web工具 - Screenqueri.es
查看>>
基于Ext.Panel编写一个图片列表类
查看>>
Android利用V4包中的SwipeRefreshLayout实现上拉加载
查看>>
HTML5树叶飘落动画
查看>>
SQL Server系统数据库备份最佳实践
查看>>
你真的会玩SQL吗?和平大使 内连接、外连接
查看>>
百度编辑器ueditor每次编辑后多一个空行的解决办法
查看>>
C# 两行代码实现 延迟加载的单例模式(线程安全)
查看>>
8个超炫酷仿HTML5动画源码
查看>>
oppo X907刷机包 COLOROS 1.0 正式版公布 安卓4.2.2
查看>>
搜索技术了解
查看>>
HTML5的新特性
查看>>
ZOJ 2702 Unrhymable Rhymes 贪心
查看>>
Android UI布局之LinearLayout
查看>>
Android Scroll分析——滑动效果产生
查看>>
iOS如何把导航默认的返回按钮设置成“返回”
查看>>
可以多分类的神经网络
查看>>
链表的倒序查找
查看>>
Ubuntu 12 编译安装 PHP 5.4 及 问题汇总
查看>>
mysql服务器io等待高定位与分析
查看>>