在 Javascript 中,当我想声明一个“公开”可访问的函数时,惯用的方法是什么?
MyObj.prototype.foo = function() {
...
}
或者
function MyObj() {
this.foo = function() {
...
}
}
什么情况会决定一种风格而不是另一种风格?一个比另一个有什么优势?
非常感谢您的帮助!
在 Javascript 中,当我想声明一个“公开”可访问的函数时,惯用的方法是什么?
MyObj.prototype.foo = function() {
...
}
或者
function MyObj() {
this.foo = function() {
...
}
}
什么情况会决定一种风格而不是另一种风格?一个比另一个有什么优势?
非常感谢您的帮助!
当在原型上声明的方法时,它在通过调用该函数作为构造函数创建的所有实例之间共享。
//assuming the first kind
var a = new MyObj();
var b = new MyObj();
//a and b both have the _same_ foo method
另一方面,当它在类中创建时,每个都会获得自己的函数实例。
//assuming the second kind
var a = new MyObj();
var b = new MyObj();
//a and b both have the _different_ foo methods
在原型上创建东西对于共享功能很有用。它比为每个实例提供自己的方法副本要快。但是,如果构造创建了闭包,则函数将可以访问它。
您只能在第二个版本中访问创建的关闭
function MyObj(x) {
var y = x;
this.foo = function() {
console.log(y);
}
}
这在第一个版本中是不可能的。虽然在这个例子中这看起来很傻,但有时闭包非常有用。但是,由于该函数现在可以访问闭包,即使它不使用它 - 它也会变慢。这在 99% 的情况下无关紧要,但在性能密集型情况下可能很重要。