js创建对象的方法汇总


Posted in Javascript onJanuary 07, 2016

js一个有三种方法创建对象,这里做一个总结.

1.对象直接量

所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议,

//创建简单对象
var obj1 = {}; //空对象

var obj2 = {
  name: "ys",
  age: 12
};
//创建复杂对象
var obj3 = {
  name: "ys",
  age: 12,
  like: {
    drink: "water",
    eat: "food"
  }
};

console.log(typeof obj1);  //object
console.log(typeof obj2);  //object
console.log(typeof obj3);  //object

有的人可能会发现,这里的键值名怎么没有引号”“,好细心,其实这个引号(单引双引号,js一样)加不加都行,但是个人建议加上,为什么能,因为加上之后,键值名可以很随意….当然如果你不乱定义名字的话,第一个比较好,因人而异,

var obj4 = {
  "my name": "ys",  //键值名中间有空格
  "my-age": 12,    //键值名中间有连字符
  "while": 111    //键值名是关键字
}

console.log(obj4['my name']);  //ys
console.log(obj4['my-age']);  //12
console.log(obj4.while);    //111
console.log(typeof obj3);    //object

通过上面的例子,大家可以看出”.”和”[]”访问属性的区别了吧

对象直接量创建的对象,键值对的值支持表达式,如下

var obj3 = {
  name: "ys",
  age: obj2.age,   //引用obj2.age
  like: {
    drink: "water",
    eat: "food"
  }
};

console.log(obj3.age); //100

2.new创建对象

1).系统内置对象

var obj1 = new Object();
var obj2 = new Array();
var obj3 = new Date();
var obj4 = new RegExp("ys");

console.log(typeof obj1);  //object
console.log(typeof obj2);  //object
console.log(typeof obj3);  //object
console.log(typeof obj4);  //object

2).自定义对象

function Person(name, age){
  this.name = name;
  this.age = age;
}

var obj1 = new Person("ys", 12);

console.log(Object.prototype.toString.call(obj1));  //object
console.log(Person instanceof Object);        //true
console.log(typeof obj1);              //object
console.log(obj1.age);                //12

3.Object.create()创建

该方法有两个参数,我就只解释下第一参数,第二个参数不常用(对对象的属性进行进一步描述)
第一个参数:传入要继承的原型(prototype)对象
怎样理解这句话呢?

var obj1 = Object.create({
  name: "ys",
  age: 12
});
console.log(obj1);     //{}
console.log(obj1.age);   //12

obj1为{},为什么可以访问到属性值呢?我们理解下第一个参数的意义“传入要继承的原型对象”

console.log(obj1.__proto__);  //Object {name: "ys", age: 12}

对象本身为空,但是原型链上数据不为空,存在obj1.age,所以可以访问到。

1).当第一个参数为null时

var obj2 = Object.create(null);   //不继承对象应有的属性和方法
console.log(obj2 + "abc");     //报错 ,失去 + 功能

为什么会报错呢?正常参数下生成的图如下:

js创建对象的方法汇总

通过图可以看出,要继承的原型对象(即参数)又继承了Object的原型对象,关键原因来了,Object的原型对象包含了一些js对象的基本方法(indexOf(),toString(),'+'功能……)而这个时候,如果参数为null,那么这条继承链就断了。

这个时候大家应该理解了一句话了吧,JavaScript中所有的对象都继承自Object,以为Object处于继承链的最顶端。

2).创建空对象

var obj3 = Object.create(Object.prototype); 
console.log(obj3);              //{},(空对象,与前两个方法 {},new Object 相同)
console.log(obj3.__proto__);         //如下图 ,只包含了基本对象的方法

代码的图:

js创建对象的方法汇总

这样创建的对象,只包含了对象的基本方法。

3).最后大家看下面的代码,希望能更深刻的理解Object.create()方法,大家可以参考这篇文章:《一种新的javascript对象创建方式Object.create()》

var obj1 = {
  name: "ys",
  age: 12
};
obj1.prototype = {
  sayName: function(){
    return console.log(this.name);
  }
};
/*①对象参数,只继承对象*/
var obj2 = Object.create(obj1);
console.log(obj2);                 //{}
console.log(obj2.name);               //ys
/*console.log(obj2.sayName());*/          /* 报错 obj2.sayName is not a function*/
console.log(obj2.__proto__.prototype.sayName());  //ys 理解原型的原型

如果不理解的话,看下面的图

js创建对象的方法汇总

/*②对象原型,继承对象原型*/
var obj3 = Object.create(obj1.prototype);
console.log(obj3);                 //{}
console.log(obj3.name);               //undefined,没有继承对象本身
obj3.name = "ys";
console.log(obj3.name);               //ys
console.log(obj3.sayName());            //ys

代码不理解看图(设置name后的图):

js创建对象的方法汇总

这个时候相信大家都理解第一个参数了吧。

以上就是本文的全部内容,希望可以帮助大家更好的创建对象。

Javascript 相关文章推荐
很酷的javascript loading效果代码
Jun 18 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
Dec 25 Javascript
JavaScript自定义事件介绍
Aug 29 Javascript
Jquery实现控件的隐藏和显示实例
Feb 08 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
web前端设计师们常用的jQuery特效插件汇总
Dec 07 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
AngularJS中$apply方法和$watch方法用法总结
Dec 13 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
Javascript实现的StopWatch功能示例
Jun 13 Javascript
使用D3.js制作图表详解
Aug 13 Javascript
layui-table对返回的数据进行转变显示的实例
Sep 04 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 #Javascript
js确认框confirm()用法实例详解
Jan 07 #Javascript
实例讲解jquery与json的结合
Jan 07 #Javascript
javascript仿百度输入框提示自动下拉补全
Jan 07 #Javascript
基于jquery实现表格无刷新分页
Jan 07 #Javascript
js密码强度检测
Jan 07 #Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 #Javascript
You might like
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHPThumb图片处理实例
2014/05/03 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
解析Python中的二进制位运算符
2015/05/13 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
用python求一重积分和二重积分的例子
2019/12/06 Python
Python函数调用追踪实现代码
2020/11/27 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
俄语专业毕业生推荐信
2013/10/28 职场文书
企业军训感想
2014/02/07 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
支教个人总结
2015/03/04 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书