javascript创建对象的3种方法


Posted in Javascript onNovember 02, 2016

本文为大家分享了js创建对象的多种方法,分享个方法的优劣,具体内容如下

第一种创建对象的方式:

创建JSON对象
推荐使用的场合: 作为函数的参数,临时只用一次的场景。比如设置函数原型对象。

var object = {
  name: "Eric",
  age: 24,
  sayHi: function(){
   console.log("My name is "+ this.name + " this year is " + this.age + "years old.")
  }
 };

第二种创建对象的方式:

创建一个Object对象

var object = new Object();
 object.name = "Eric";
 object.age = 24;
 object.sayHi = function(){....};

以上两种创建对象方式的缺点:不能作为对象创建的模板,也就是不能用new进行构造新对象。

第三种创建对象的方式:

function Person() {
  this.name = "Eric";
  this.age = 24;
  this.sayHi = function(){
   console.log(this.name);
  }
 }

 var object1 = new Person();
 var object2 = new Person();

这种创建对象方式解决了前两种方式的缺点,可以作为对象创建的模板,可以一直复用创建出多个对象。

new运算符的作用:

执行构造函数(new后面的那个函数),在构造函数内部创建一个空对象
把上一部创建的空对象跟构造函数的原型对象进行关联
然后把this指向当前空对象
在构造函数执行结束后,如果没有return,把空对象返回给object

new运算符原理

第三种方式有个缺点: 对象的内部的函数会在每个对象中都存一份如果创建的对象非常多的话,那么非常浪费内存。函数的行为是所有对象可以共有,不需要每个对象都保存一份。所以,可以把函数放到原型中进行声明,那么所有对象都有了公共的函数,而且内存中只保留一份。所有的属性写到对象的内部

第三种方式beta1:

function Person() {
  this.name = 'Eric';
  this.age = 24;
 }
 Person.prototype = {
  sayHi: function() {
  },
 };

 var object1 = new Person();
 var object2 = new Person();

继续升级 beta2 :

function Person(name,age) {
  this.name = name || "";
  this.age = age || "";
 }
 Person.prototype = {
  sayHi: function() {
  },
 };

 var object1 = new Person(name1,age1);
 var object2 = new Person(name2,age2);

问题:1、调用者如果传递参数的顺序发生变化,那么废了
问题:2、参数增减都会导致函数声明变化,调用的地方也可能发生变化。

如何解决:继续升级 beta3 :

function Person(option) { //用一个对象把所有参数覆盖
  this.name = option.name || "";
  this.age = option.age || "";
 }
 Person.prototype = {
  sayHi: function() {
  },
 };

 var object1 = new Person({
   name: "Eric",
   age: 24
  });
 var object2 = new Person({
   name: "XXX",
   age: xx
  });

继续优化,把初始化的代码 放到init函数中

继续升级 beta4 :

function Person(option) {
  this._init(option);
 }
 Person.prototype = {
  _init: function (option){
   this.name = option.name;
   this.age = option.age;
  },
  sayHi: function(){
   console.log("HI");
  }
 };

 var object1 = new Person({
   name: "Eric";
   age: 24
  });
 object1.sayHi();

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

Javascript 相关文章推荐
深入理解JavaScript系列(2) 揭秘命名函数表达式
Jan 15 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
给ListBox添加双击事件示例代码
Dec 02 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
AngularJS 表达式详细讲解及实例代码
Jul 26 Javascript
JavaScript仿微信打飞机游戏
Jul 05 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
详解Webpack DLL用法以及功能
Jul 11 Javascript
原生js实现Flappy Bird小游戏
Dec 24 Javascript
Vue实现页面添加水印功能
Nov 09 Javascript
微信小程序保存图片到相册权限设置
Apr 09 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
AngularJS入门教程之表单校验用法示例
Nov 02 #Javascript
JQuery Ajax WebService传递参数的简单实例
Nov 02 #Javascript
ASP.NET jquery ajax传递参数的实例
Nov 02 #Javascript
Javascript 正则表达式校验数字的简单实例
Nov 02 #Javascript
在JSP中如何实现MD5加密的方法
Nov 02 #Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 #Javascript
JavaScript基础——使用Canvas绘图
Nov 02 #Javascript
You might like
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
生成php程序的php代码
2008/04/07 PHP
php网页病毒清除类
2014/12/08 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
Vuex提升学习篇
2018/01/11 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
vue 组件简介
2020/07/31 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
Python简单日志处理类分享
2015/02/14 Python
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
python线程池threadpool实现篇
2018/04/27 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
出纳员岗位职责
2014/03/13 职场文书
运动会广播稿100字
2014/09/14 职场文书
招商引资工作汇报材料
2014/10/28 职场文书