以这种方式声明类的字段是否更好:
function MyClass() {
this.aMethod = function() {
// code
}
}
或者这样:
function MyClass() {
}
MyClass.prototype.aMethod = function() {
// code
}
为什么?
提前致谢。
答案 0 :(得分:2)
原型方法,因为它更有效,因为它将函数添加到原型意味着使用构造函数创建的任何对象自动获取该方法,而前/第一种方式必须为每个小对象创建这些方法单独制作。
虽然这取决于你正在使用该方法做什么。如果您不需要它作为公共方法,那么您可以选择使用this.method
或函数语句。
答案 1 :(得分:2)
正如@meder所说,原型方法是首选方法,因为方法是在构造函数的原型中声明的,但是您向我们展示的第一种方法对于实现私有成员非常有用,例如:
function MyClass() {
var privateValue = 'secret';
function privateMethod() { }
this.aMethod = function() {
// privateValue and privateMethod are accessible here.
return privateValue;
}
}
var foo = new MyClass();
foo.aMethod(); // "secret"
foo.privateValue; // undefined !
这就是Crockford所谓的privileged method,因为这个方法可以访问在构造函数的词法范围内创建的所有标识符(创建closure)。
答案 2 :(得分:0)
这取决于用法。当您要经常使用该方法时,请使用第一种方法;第二,当你打算罕见地使用它时。原因是当使用构造函数创建对象时,不会加载原型方法,只会在调用时加载它们,这样可以节省一些性能。