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 实现??打印?理
Apr 28 Javascript
IE事件对象(The Internet Explorer Event Object)
Jun 27 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
js写的方法实现上传图片之后查看大图
Mar 05 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
May 22 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
微信小程序数字滚动插件使用详解
Feb 02 Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 Javascript
vue项目中使用scss的方法步骤
May 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
提高PHP编程效率的方法
2013/11/07 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
javascript实现异形滚动轮播
2019/11/28 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
python实现图像识别功能
2018/01/29 Python
python实现抽奖小程序
2020/04/15 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
python中有帮助函数吗
2020/06/19 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
电气自动化自荐信
2013/10/10 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
房地产项目建议书
2014/03/12 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
李开复演讲稿
2014/05/24 职场文书
房屋授权委托书范本
2014/10/07 职场文书
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS