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 相关文章推荐
javascript 日期常用的方法
Nov 11 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
Feb 23 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
jquery等待效果示例
May 01 Javascript
js生成的验证码的实现与技术分析
Sep 17 Javascript
JsRender实用入门教程
Oct 31 Javascript
JavaScript DOM进阶方法
Apr 13 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
如何使用Vuex+Vue.js构建单页应用
Oct 27 Javascript
js中DOM事件绑定分析
Mar 18 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
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获取错误信息的方法
2015/07/17 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python查询mysql,返回json的实例
2018/03/26 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
python Xpath语法的使用
2020/11/26 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
幼儿园教师演讲稿
2014/05/06 职场文书
毕业生应聘求职信
2014/07/10 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
2014年售票员工作总结
2014/11/19 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
详解python的内存分配机制
2021/05/10 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS