我有两种不同的方式在匿名范围内使用我的Javascript对象。
(function(){
function MyObject() {
this.MyMethod = function() {
//code here
}
}
first = new MyObject();
first.MyMethod();
})();
和
(function(){
function MyObject(){};
MyObject.prototype.MyMethod = function() {
//code here
}
first = new MyObject();
first.MyMethod();
})();
我知道原型版本更好但不确定使用匿名范围是否会对优点/缺点产生影响。
答案 0 :(得分:1)
在这种情况下,我认为它们几乎相同。每次外部匿名函数执行时都将解释这两个。
所以只要你只调用一个new MyObject()
,就没关系了。如果你多次调用它,你最好使用原型版本。
答案 1 :(得分:1)
我不认为这会有所作为。 IIFE(Immediatly Invoked Function Expression)用于保护变量不会泄漏到全局范围。
MyObject
都是构造函数,但第一个函数作为该实例的唯一属性(将在调用new
时克隆)。在第二个示例中,您将一个方法添加到该构造函数的原型中,使其可用于所有实例,这就是为什么第二个示例是首选AFAIK的原因。
答案 2 :(得分:1)
在匿名范围内使用没有区别。
其好处与在全球范围内使用相同。
如果你实例化MyObject很多次“prototype”版本将避免在每个实例中复制该方法,因此将避免浪费资源(内存)。
如果要将MyObject实例化一两次,那么立即函数与全局范围中的函数没有区别。