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 SocialHistory 检查访问者是否访问过某站点
Aug 02 Javascript
web网页按比例显示图片实现原理及js代码
Aug 09 Javascript
js实现简单的星级选择器提交效果适用于评论等
Oct 18 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
Dec 25 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 Javascript
jquery if条件语句的写法
May 19 Javascript
js获取元素的标签名实现方法
Oct 08 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
Aug 29 jQuery
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
详解Vue中的MVVM原理和实现方法
Jul 15 Javascript
JavaScript 语句之常用 for 循环详解
Mar 29 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
PHP之短标签开启设置
2013/06/17 PHP
学习PHP session的传递方式
2016/06/15 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
Nike瑞士官网:Nike CH
2021/01/18 全球购物
学前教育毕业生自荐信范文
2013/12/24 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
新闻编辑求职信
2014/07/13 职场文书
老干部工作先进事迹
2014/08/17 职场文书
课外科技活动总结
2014/08/27 职场文书
办公用房租赁协议书
2014/11/29 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
小型婚礼主持词
2015/06/30 职场文书
活动宣传稿范文
2015/07/23 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL