常用创建对象的几种方式以及优缺点
来源:互联网 发布:苹果7蜂窝数据快捷键 编辑:程序博客网 时间:2024/06/13 11:01
1.独立声明模式
var fn1 = new Object();fn1.name = '张三';var fn2 = new Object();fn2.name = '李四';
优点:创建的每个对象之间互相独立,不会混淆
缺点:结构相同的对象不能重用
2.工厂模式
function factory(name,age,obj){ var o = new Object(); o.name = name; o.age = age; o.obj = function(){....}; return o;}
优点:每次创建类似结构的对象直接调用factory()方法传参即可;
缺点:每次创建出来的对象都是属于Object()对象,本质是一样的,要区分的话就不好区分了
3.构造函数模式
function Obj(name,age){ this.name = name; this.age = age;};var fn1 = new Obj('张三',22);var fn2 = new Obj('李四',16);
优点:解决了对象复用和传参初始化的问题;
缺点:创建的对象之间不能共享属性
4.原型模式
function Obj(){};obj.prototype.name = '张三';obj.prototype.age = 26;obj.prototype.arr = [1,2,3];var fn1 = new Obj();fn1.name = '李四';fn1.arr.push(4);var fn2 = new Obj();fn2.age = 22;fn2.arr;//[1,2,3,4]
优点:所new出来的对象在prototype中的属性是共享的,能保证所new的对象实例的属性完全统一,修改实例的属性值不会影响prototype中的值
缺点:当含有引用类型的属性时,引用类型的值是存放在prototype中的,直接在对象中修改引用类型就把所有的引用类型都给修改了; 忽略了初始化传参,所有new出来的对象的属性都是一致的,需要手动再赋值
5,原型字面量模式(和原型模式本质上是一样的)
function Obj(){};Obj.prototype = { constructor : Obj, name : '张三', age : 22};
继承了原型模式的所有优缺点,单也有自己的优缺点
优点:更好的体现了封装的特性,便于读写
缺点:需要手动的去把constructor指向自己
6.构造函数加原型模式
function Obj(fn1,fn2){ //不共享的属性写在构造函数里 this.fn1 = function(){....}; this.fn2 = fn2;}Obj.prototype = { //共享的属性写在原型里 constructor : Obj, name: '张三', age : 22}
优点: 这种模式完美解决了共享属性与不共享属性的问题,而且可以精确控制,是非常不错的模式。
缺点: 但是此种办法,原型与构造函数相分离,让人感觉很怪异,体现不了封装;
7.动态原型模式
function Obj(name,age){ this.name = name; //不共享的属性 this.age = age; if(typeof arr != 'object'){ //共享的属性 Obj.prototype.arr = ['aaa','bbb']; }}
优点:这个模式继承了上一个模式(构造+原型)的所有优点,同时也完美解决了封装性问题
缺点:此种模式书写原型时不可用字面量模式,会切断实例和新原型之间的联系
阅读全文
0 0
- 常用创建对象的几种方式以及优缺点
- JS对象以及创建对象的几种方式
- javascript之创建对象的多种方式以及优缺点
- js 创建对象的几种常用的方式
- js创建对象的几种常用方式
- js创建对象的几种常用方式小结(推荐)
- js创建对象的几种常用方式小结
- js创建对象的几种常用方式
- js创建对象的几种常用方式小结
- js创建对象的方法以及优缺点
- JS 创建对象的几种方式
- JavaScript 创建对象的几种方式
- js创建对象的几种方式
- JavaScript创建对象的几种方式
- Javascript创建对象的几种方式
- JS 创建对象的几种方式
- javascript创建对象的几种方式
- 创建对象的几种方式
- Terrier索引及查询的处理
- <六>、Hadoop Web项目--网上商城推荐系统
- 简单安装使用WebLogic
- 眼球追踪技术是VR下一个突破口?
- javascript创建对象的7种模式(赋:优点+缺点分析)
- 常用创建对象的几种方式以及优缺点
- C#遍历指定文件夹中的所有文件
- 归并排序算法的优化
- Java多线程Sleep详解
- 苹果在测试不同的激光雷达和摄像机
- 连接sql server错误
- Datables修改表头(三)
- Qt笔记-qss定制QCalendarWidget
- hone hone clock 与小松鼠驾到~还有牛顿摆等一些其他好玩的东西