我刚开始在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;
}());
问题是:是否有某些理由阻止我保存这些关于功能或某些意外错误的字符,或者这样做是否安全? 这似乎对我使用它的情况很好吗?
答案 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();