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检查日期格式的函数[比较全]
Oct 17 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
JavaScript程序设计高级算法之动态规划实例分析
Nov 24 Javascript
vue+elementUI实现表格关键字筛选高亮
Oct 26 Javascript
JS实现进度条动态加载特效
Mar 25 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
Sep 11 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 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
在字符串中把网址改成超级链接
2006/10/09 PHP
PHP读MYSQL中文乱码的解决方法
2006/12/17 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
js实现随机点名程序
2020/09/17 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python3如何判断三角形的类型
2020/04/12 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
医学生自我鉴定范文
2013/11/08 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
毕业晚会主持词
2014/03/24 职场文书
雾霾停课通知
2015/04/24 职场文书
导游词之无锡梅园
2019/11/28 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python