[英]Evaluate subclass method inside base class scope in javascript
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)这是不可能的吗?
通常我会推荐myFunc.apply
和myFunc.eval
; 这就是我在javascript中解释为“关于基类”的内容。
但是,根据您的标题,您说的是“内部基类范围”。 如果我正确地假设您正在谈论闭包并且能够在外部函数中引用变量,那么这是不可能的,除非可能是在闭包中保留一个入口点,然后您可以将请求传递给eval样式...但是如果这样做,您可能还拥有一个类似于this._private.C
的对象。
如果您尝试将内容保持为“私有”,那么在javascript中这样做确实不值得费心。
如果您说出您对this.C = function(){...}
的动机,并以此this.C()
访问,我也许可以给出一个更清晰的答案。
“ 这将允许C在实例上被调用/本质上将其公开。没有理由公开它,因为它应该是一个辅助方法。我想您可能会说,我的主要沮丧之处是该辅助方法不能被继承。子类。
在那种情况下,它实际上不是私有的。 但是,您可以做的是定义您的辅助方法所在的位置:在外部范围内适当。 =)例如:
(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();
您不能,至少不能不更改基类。
C
在base
内具有词法范围,因此仅当被同一范围内定义的其他方法调用时才可见。 目前,这是一种真正的私有方法。
C
只有在它的声明是其词法范围之外访问this.C
,而不是var C
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.