0

我有两种不同的方式在匿名范围内使用我的 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();
})();

我知道原型版本更好,但不确定使用匿名范围是否会对好处/缺点产生影响。

4

3 回答 3

1

在匿名范围内使用没有区别。

好处与在全局范围内使用相同。

如果您实例化 MyObject 的次数非常多,“原型”版本将避免在每个实例中复制该方法,因此将避免浪费资源(内存)。

如果您将 MyObject 实例化一两次,那么它在直接函数中与在全局范围内没有区别。

于 2013-01-16T09:28:15.053 回答
1

在这种情况下,我认为它们几乎是等价的。每次外部匿名函数执行时,两者都会被解释。

所以只要你new MyObject()在里面只调用一个,没关系。如果你不止一次调用它,你最好使用原型版本。

于 2013-01-16T09:22:12.103 回答
1

我不认为这有什么不同。IIFE(立即调用函数表达式)是为了保护变量不泄漏到全局范围。

两者MyObject都是构造函数,但第一个具有作为该实例的唯一属性的函数(在调用时将被克隆new)。在第二个示例中,您向该构造函数的原型添加一个方法,使其可用于所有实例,这就是为什么第二个示例是首选 AFAIK 的原因。

于 2013-01-16T09:23:34.093 回答