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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
jquery 学习之二 属性(html()与html(val))
Nov 25 Javascript
文本框回车提交与禁止提交示例
Sep 27 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
Mar 22 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
详解vue之页面缓存问题(基于2.0)
Jan 10 Javascript
浅谈Angularjs中不同类型的双向数据绑定
Jul 16 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
vue打包使用Nginx代理解决跨域问题
Aug 27 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
分享15个Webpack实用的插件!!!
Mar 31 Javascript
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
PHP脚本数据库功能详解(下)
2006/10/09 PHP
一个数据采集类
2007/02/14 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
Vue封装的组件全局注册并引用
2019/07/24 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python爬取个性签名的方法
2018/06/17 Python
python之mock模块基本使用方法详解
2019/06/27 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
AUC计算方法与Python实现代码
2020/02/28 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
python中tab键是什么意思
2020/06/18 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
企业领导对照检查材料
2014/08/20 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
初中生毕业评语
2014/12/29 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
深入理解go slice结构
2021/09/15 Golang
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers