咱们能够直接在建立对象的时候添加功能javascript
var person = { name : 'zqq', age : 28, say : function(){ return "hello"; } };
或者html
首先定义一个"空对象",而后添加属性和方法java
var person = {}; person.name = 'zqq'; person.age = 28; person.say = function(){ return "hello"; }
上面的"空对象"为何打了双引号?这只是一种简称而已。在js中根本不存在真正的空对象,理解这一点相当重要!即便时最简单的{}对象也会包含从Object.prototype继承而来的属性和方法。咱们提到的"空对象"只是说这个对象没有自有属性,不考虑它是否有继承而来的属性git
var person = new Object();//没传参数的话,()能够省略 person.name = 'zqq'; person.age = 28;
字面量的优点:github
- 它的代码量更少,更易读;
- 它能够强调对象就是一个简单的可变的散列表,而没必要必定派生自某个类;
- 对象字面量运行速度更快,由于它们能够在解析的时候被优化:它们不须要"做用域解析(scope resolution)";由于存在咱们建立了一个同名的构造函数Object()的可能,当咱们调用Object()的时候,解析器须要顺着做用域链从当前做用域开始查找,若是在当前做用域找到了名为Object()的函数就执行,若是没找到,就继续顺着做用域链往上照,直到找到全局Object()构造函数为止
- Object()构造函数能够接收参数,经过这个参数能够把对象实例的建立过程委托给另外一个内置构造函数,并返回另一个对象实例,而这每每不是你想要的。
下面的示例代码中展现了给new Object()传入不一样的参数(数字、字符串和布尔值),最终获得的对象是由不一样的构造函数生成的:markdown
// 空对象 var o = new Object(); console.log(o.constructor === Object); // true // 数值对象 var o = new Object(1); console.log(o.constructor === Number); // true console.log(o.toFixed(2)); // "1.00" // 字符串对象 var o = new Object("I am a string"); console.log(o.constructor === String); // true // 普通对象没有substring()方法,但字符串对象有 console.log(typeof o.substring); // "function" // 布尔值对象 var o = new Object(true); console.log(o.constructor === Boolean); // true
Object()构造函数的这种特性会致使一些意想不到的结果,特别是当参数不肯定的时候函数
综上所述:尽可能用对象字面量的方式来建立对象优化
参考资料:
https://github.com/TooBug/jav...
http://lichking1201.github.io....net