在匿名作用域中使用Javascript Prototype对象

时间:2013-01-16 09:16:32

标签: javascript prototype

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

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

3 个答案:

答案 0 :(得分:1)

在这种情况下,我认为它们几乎相同。每次外部匿名函数执行时都将解释这两个。

所以只要你只调用一个new MyObject(),就没关系了。如果你多次调用它,你最好使用原型版本。

答案 1 :(得分:1)

我不认为这会有所作为。 IIFE(Immediatly Invoked Function Expression)用于保护变量不会泄漏到全局范围。

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

答案 2 :(得分:1)

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

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

如果你实例化MyObject很多次“prototype”版本将避免在每个实例中复制该方法,因此将避免浪费资源(内存)。

如果要将MyObject实例化一两次,那么立即函数与全局范围中的函数没有区别。