js创建对象几种方式的优缺点对比


Posted in Javascript onSeptember 28, 2016

比较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语句中只会调用一次,就是在碰到第一个实例调用方法时会执。此后所有实例都会共享该方法。在动态原型方法下,不能使用对象字面量重写原型。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery this 和 $(this) 的区别
Aug 23 Javascript
Jquery AJAX 框架的使用方法
Nov 03 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
Apr 03 Javascript
jQuery实现的漂亮表单效果代码
Aug 18 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
Dec 14 Javascript
js时间戳转为日期格式的方法
Dec 28 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
微信小程序之多文件下载的简单封装示例
Jan 29 Javascript
RxJS的入门指引和初步应用
Jun 15 Javascript
深入解析koa之异步回调处理
Jun 17 Javascript
React Hooks 实现和由来以及解决的问题详解
Jan 17 Javascript
AngularJS表单验证中级篇(3)
Sep 28 #Javascript
微信公众号 客服接口的开发实例详解
Sep 28 #Javascript
jQuery解析XML 详解及方法总结
Sep 28 #Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
Sep 28 #Javascript
微信小程序 实例应用(记账)详解
Sep 28 #Javascript
JavaScript 闭包详细介绍
Sep 28 #Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 #Javascript
You might like
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
常用js脚本
2006/12/03 Javascript
javascript各种复制代码收集
2008/09/20 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
js a标签点击事件
2017/03/30 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Django URL传递参数的方法总结
2016/08/28 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
python常用运维脚本实例小结
2020/02/14 Python
Python使用进程Process模块管理资源
2020/03/05 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
《泉水》教学反思
2014/04/11 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
大学社团活动总结
2014/04/26 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
写给导师的自荐信
2015/03/06 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle