base = function () {
this.A = function () {
this.B();
}
var C = function () {
alert('I am C');
}
}
sub = function () {
this.B = function () {
C();
}
}
sub.prototype = new base();
(new sub()).A();
如何判断调用B()
来评估基类? (即基类的调用c)这不可能吗?
答案 0 :(得分:2)
通常我会推荐myFunc.apply
和myFunc.eval
;这就是我在javascript中解释为“关于基类”的内容。
但是根据你的标题,你说“在基类范围内”;如果我正确地假设您正在讨论闭包并且能够在外部函数中引用变量,那么这是不可能的,除非将入口点保留在闭包中,您可以在其中传入请求eval-style ...但是如果你要做到这一点,你可能会有一个像this._private.C
这样的对象。
如果你试图保持“私密”,那么在javascript中这样做真的不值得。
如果您说出this.C = function(){...}
的动机并将其作为this.C()
访问,我可能会给出更明确的答案。
“这将允许在实例上调用C /基本上暴露它。没有理由将它暴露出来,因为它应该是一个帮助方法。我想你可以说我的主要挫折是帮手方法不能由子类继承。“ - OP
在这种情况下,它确实不是私密的。但是,您可以做的是定义它所属的辅助方法:适当地在外部范围内。 =)例如:
(function(){
var C = function () {
alert('I am C');
}
base = function () {
this.A = function () {
this.B();
}
}
sub = function () {
this.B = function () {
C();
}
}
})();
sub.prototype = new base();
(new sub()).A();
答案 1 :(得分:1)
你不能,至少不能没有改变基类。
C
在base
中具有词汇范围,因此只有在同一范围内定义的其他方法调用时才可见。它目前是一个真正的私有方法。
C
只能在其词法范围之外访问,如果它被声明为this.C
而不是var C
。