使用变量作为Foo.prototype的简写

时间:2014-01-26 18:36:24

标签: javascript design-patterns prototype

我刚开始在JavaScript中使用模块模式来声明功能对象,但发现在声明所有可能需要的公共函数时重复Foo.prototype关键字很烦人。

因此,为了方便,我想出了一些简写变量,如下所示。

(function(){    
   var Foo = function(){
      alert('created Foo');
   }

   // shorthand for further creation of public functions
   var pro = Foo.prototype;

   //public function with shorthand
   pro.bar = function(){
      //some cool stuff here
   }
   return window.Foo = Foo;
}());

问题是:是否有某些理由阻止我保存这些关于功能或某些意外错误的字符,或者这样做是否安全? 这似乎对我使用它的情况很好吗?

2 个答案:

答案 0 :(得分:4)

据我所知,原型在修改时与其他任何对象一样。保持对它的引用是绝对可以的

答案 1 :(得分:0)

编辑:

这样做是可以的,但如果你有这样的代码,有时会有点困惑:

var pro='123';

(function () {
    var Foo=function () {
        alert('created Foo');
    };

    // shorthand for further creation of public functions
    var pro=Foo.prototype;

    var x=new Foo();
    alert(pro);
})();

alert(pro);

或意外地写出来:

var pro='123';

(function () {
    var Foo=function () {
        alert('created Foo');
    };

    // use pro without var
    pro=Foo.prototype;

    var x=new Foo();
    alert(pro);
})();

alert(pro);

前者将正常工作,只是在阅读代码时令人困惑,读者需要知道IIFE中的var pro在全局范围内不是pro

后者可能是一个可怕的错误,pro被重新分配并失去其原始价值。

所以我在原始答案中提出了代码,因为你无法修改函数内的this


我认为你可以这样做..

var Foo=(function () {
    function Foo() {
        alert('created Foo');
    }

    // inside the anonymous function `this` is `Foo.prototype`
    (function () {
        this.bar=function () {
            //some cool stuff here
        };
    }).call(Foo.prototype);

    return Foo;
})();

var x=new Foo();
x.bar();