去某家面试的时候,在笔试的时候,看到了这个问题,回来研究一下。
JS 中有很多种对象的声明方式,一般我用到的也就是这两种,通过字面量来声明对象和通过构造函数来声明对象。
用字面量来声明对象
我们可以直接在创建对象的时候添加功能
let person = {
name: 'paji',
age: 18,
sex: 'male',
speak: function() {
console.log('大家好');
}
};
或者在一开始先声明一个空的对象,当然这个空对象也不是空对象,也是从 object 上继承了好多 object 的属性,只是没有自有属性
let person = {},
person.name = 'paji';
person.age = 18;
person.sex = 'male';
person.speak = function() {
console.log('大家好');
}
用构造函数声明对象
var person = new Object();
person.name = 'paji';
person.age = 18;
person.sex = 'male';
person.speak = function() {
console.log('大家好');
};
字面量的优势
- 代码量更少,更易读
- 强调对象就是一个简单的可变的散列表,而不必一定派生自某个类
- 对象字面量运行速度更快,因为它们可以在解析的时候被优化:它们不需要"作用域解析(scope resolution)";因为存在我们创建了一个同名的构造函数Object()的可能,当我们调用Object()的时候,解析器需要顺着作用域链从当前作用域开始查找,如果在当前作用域找到了名为Object()的函数就执行,如果没找到,就继续顺着作用域链往上照,直到找到全局Object()构造函数为止
- Object()构造函数可以接收参数,通过这个参数可以把对象实例的创建过程委托给另一个内置构造函数,并返回另外一个对象实例,而这往往不是你想要的。
尽量用对象字面量的方式来创建对象