【发布时间】:2017-03-13 21:50:20
【问题描述】:
我正在使用 JavaScript 原型链接技术来链接函数,如下所示:
var foo = (function () {
function fn(arg) {
if (!(this instanceof fn)) {
return new fn(arg);
}
this.arg = arg;
return this;
}
var func = function (element) {
return fn(element);
};
fn.prototype = {
bar: function () {
return this;
}
}
func.functions = fn;
return func;
}());
我想知道如何访问fn.prototype,这样我就可以在foo 原型的闭包之外添加更多功能。
如果我只是简单地这样做,它是行不通的:
foo.prototype.baz = function () {
alert(this.arg);
}
foo("hello").baz();
但是,如果 fn 分配给 foo (func.functions = fn;),如 foo 私人闭包中所示,我可以执行以下操作,它会起作用:
foo.functions.prototype.baz = function () {
alert(this.arg);
}
foo("hello").baz();
还有其他方法可以实现吗?
【问题讨论】:
-
你确定你的意思是
baz而不是bar -
还有这行,
func.functions = fn在这种情况下没有任何作用,因为您没有在func正文中使用fn和this.fn -
您可以利用对象通过引用而不是值传递的事实,并执行以下操作:
func.prototype = fn.prototype;因此,当更改foo的原型时,fn的原型会更改为好吧! -
是的,baz 是我想链接的新功能。老实说,我发现很难解释这种情况,希望这是有道理的。
标签: javascript closures prototype chaining