Page 179 - Node.js开发指南
P. 179
附录 B Node.js 编程规范 173
B.11 对象定义 1
尽量将所有的成员函数通过原型定义,将属性在构造函数内定义,然后对构造函数使用
new 关键字创建对象。绝对不要把属性作为原型定义,因为当要定义的属性是一个对象的
时候,不同实例中的属性会指向同一地址。除非必须,避免把成员函数定义在构造函数内部, 2
否则会有运行时的闭包开销。
正确:
function FooObj(bar) { 3
//在构造函数中初始化属性
this.bar = bar;
this.arr = [1, 2, 3];
}
//使用原型定义成员函数 4
FooObj.prototype.func = function() {
console.log(this.arr);
};
var obj1 = new FooObj('obj1'); 5
var obj2 = new FooObj('obj2');
obj1.arr.push(4);
obj1.func(); // [1, 2, 3, 4]
obj2.func(); // [1, 2, 3]
6
错误:
function FooObj(bar) {
this.bar = bar;
this.func = function() {
console.log(this.arr); 7
};
}
FooObj.prototype.arr = [1, 2, 3];
8
var obj1 = new FooObj('obj1');
var obj2 = new FooObj('obj2');
obj1.arr.push(4);
obj1.func(); // [1, 2, 3, 4]
9
obj2.func(); // [1, 2, 3, 4]
B.12 继承
10
首先,避免使用复杂的继承,如多重继承或深层次的继承树。如果的确需要继承,那么