为什么“show”方法无法在此处访问“text”变量?
// @constructor A
var A = function(){
//alerts some text variable
this.show = function(){
alert("Hello")
alert(text);
}
}
//@constructor B
var B = function(){
//local text variable
var text = "World";
A.apply(this); // "show" method will get attached to B
}
var obj = new B();
//now calling show of B's object.
obj.show(); //returns error.
//Expected output
alerts "Hello"
alerts "World"
//Actual output
alerts "Hello"
ReferenceError: text is not defined
我在这里遗漏了什么吗? B的“show”方法不应该可以访问“text”变量吗?
答案 0 :(得分:1)
与C ++或Java不同,Javascript没有隐式this
。
如果函数(如show
)引用this.foo
,则只有this
的值取决于函数的调用方式。
但是,如果show
直接引用变量(如foo
),那么它可能意味着:
var
定义的; var
定义它(闭包在函数定义时创建),在您的情况下,第三种情况适用。 show
无法访问text
,因为它是在完全不相关的范围内定义的。
答案 1 :(得分:0)
您需要将text
声明为B
构造函数this.text = "World";
的属性。
var A = function(){
//alerts some text variable
this.show = function(){
alert("Hello")
alert(this.text);
}
}
//@constructor B
var B = function(){
//local text variable
this.text = "World";
A.apply(this); // "show" method will get attached to B
}
var obj = new B();
//now calling show of B's object.
obj.show(); //returns error.