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
JS实现一键回顶功能示例代码
Oct 28 Javascript
jquery中的查找parents与closest方法之间的区别
Dec 02 Javascript
Javascript检查图片大小不要让大图片撑破页面
Nov 04 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
jQuery检测某个元素是否存在代码分享
Jul 09 Javascript
js实现九宫格的随机颜色跳转
Feb 19 Javascript
JavaScript动态加载重复绑定问题
Apr 01 Javascript
vue实现点击隐藏与显示实例分享
Feb 13 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
vue 解决computed修改data数据的问题
Nov 06 Javascript
微信小程序接入vant Weapp组件的详细步骤
Oct 28 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
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
PHP的拦截器实例分析
2014/11/03 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python实现手机销售管理系统
2019/03/19 Python
python实现图片上添加图片
2019/11/26 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
政法大学毕业生自荐信范文
2014/01/01 职场文书
四年级学生评语大全
2014/04/21 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
篝火晚会策划方案
2014/05/16 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
社区灵活就业证明
2014/11/03 职场文书
新郎结婚保证书
2015/02/26 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书