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 ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
Dec 13 Javascript
JavaScript中定义函数的三种方法
Mar 12 Javascript
学习使用AngularJS文件上传控件
Feb 16 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
Aug 05 Javascript
深入理解(function(){... })();
Aug 16 Javascript
JavaScript之Canvas_动力节点Java学院整理
Jul 04 Javascript
js图片轮播插件的封装
Jul 21 Javascript
react-native之ART绘图方法详解
Aug 08 Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
使用vue for时为什么要key【推荐】
Jul 11 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
Aug 02 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 explode()函数用法、切分字符串
2012/10/03 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
10 个经典PHP函数
2013/10/17 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
javascript下数值型比较难点说明
2010/06/07 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
python k-近邻算法实例分享
2014/06/11 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
详解python的四种内置数据结构
2019/03/19 Python
Python使用贪婪算法解决问题
2019/10/22 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
违反课堂纪律检讨书
2014/01/19 职场文书
督导岗位职责
2015/02/04 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技