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 相关文章推荐
心扬JS分页函数代码
Sep 10 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
Feb 27 Javascript
节点的插入之append()和appendTo()的用法介绍
Jan 13 Javascript
js或jquery实现页面打印可局部打印
Mar 27 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
js识别uc浏览器的代码
Nov 06 Javascript
vue子父组件通信的实现代码
Jul 09 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
JS+jQuery实现注册信息的验证功能
Sep 26 jQuery
security.js实现的RSA加密功能示例
Jun 06 Javascript
JavaScript设计模式之观察者模式实例详解
Jan 16 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
一个用php3编写的简单计数器
2006/10/09 PHP
优化php效率,提高php性能的一些方法
2011/03/24 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP进程通信基础之信号
2017/02/19 PHP
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
Python中交换两个元素的实现方法
2018/06/29 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
python3 爬取图片的实例代码
2018/11/06 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
财务副总经理工作职责
2013/11/25 职场文书
《识字五》教学反思
2014/03/01 职场文书
运动会口号16字
2014/06/07 职场文书
爱护公物演讲稿
2014/09/09 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
回复函格式及范文
2015/07/14 职场文书
开学典礼致辞
2015/07/29 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
springboot读取nacos配置文件
2022/05/20 Java/Android