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学习历程和心得小结
Aug 16 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
Sep 28 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
Jul 10 Javascript
节点的插入之append()和appendTo()的用法介绍
Jan 13 Javascript
js检测浏览器版本、核心、是否移动端示例
Apr 24 Javascript
js仿微博实现统计字符和本地存储功能
Dec 22 Javascript
学习JavaScript鼠标响应事件
Dec 25 Javascript
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
vue实现提示保存后退出的方法
Mar 15 Javascript
js实现鼠标点击飘爱心效果
Aug 19 Javascript
vue实现广告栏上下滚动效果
Nov 26 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
python函数定义和调用过程详解
2020/02/09 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
应届生会计求职信
2013/11/11 职场文书
水果超市创业计划书
2014/01/27 职场文书
学习十八大报告感言
2014/02/04 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript