我正在运行三段代码。第一个起作用,而第二个和第三个起作用。我不确定我理解为什么第二个和第三个不起作用。
user2 = {
handle :"mytext",
alertName: function(){
alert(this.handle);}
};
user2.handle; //"mytext"
user2.alertName() // alerts "mytext"
在这里,我知道句柄被分配给user2对象,并且是user2对象上的一个键。因此,当我调用user2.alertName()时,this.handle引用user2.handle,因此打印出正确的值。
但是,为什么以下两个版本的代码不起作用:
user2 = {
handle :"mytext",
alertName: function(){
alert(handle);}
};
user2.handle; //"mytext"
user2.alertName() // gives error that handle is not defined in the console
和
user2 = {
handle :"mytext",
alertName: function(handle){
alert(handle);}
};
user2.handle; //"mytext"
user2.alertName() //gives undefined in the alert popup
据我了解范围,user2对象定义的句柄应该可用于user2的子范围。 我在这里错过了一些基本的东西。如果这看起来像是一个菜鸟问题的话,但我想我得到了它并且总是不断回到这里。而且,当我查找文档时,我无法在任何地方得到明确的答案,为什么第二个或第三个没有意义。
答案 0 :(得分:2)
在你的第二和第三个代码中:
user2 = {
handle :"mytext", // handle is a property
alertName: function(){
alert(handle);}
};
因为,handle不是定义的变量,因此是错误。 在第三种情况下,您将句柄定义为方法签名中的参数,但未在调用中传递任何参数,因此它是未定义的。
答案 1 :(得分:1)
user2 = {
handle :"mytext",
alertName: function(){
alert(handle);}
};
user2.handle; //"mytext"
user2.alertName() // gives error that handle is not defined in the console
handle
是property
的{{1}},因此您需要通过引用object
的{{1}}来访问对象的属性。< / p>
this
抛出错误,因为它试图找到一个名为handle的变量,该变量不在范围内。
如果您定义了varibale句柄object
,则可以在alert(handle);
globally
中访问它。
user2
答案 2 :(得分:1)
在第二个例子中,函数&#39; alertName&#39;期望参数&#39;句柄&#39;。 调用user2.alertName(),不带参数结果未定义。
对于作品应该是这样的:
user2.alertName(user2.handle);
答案 3 :(得分:1)
我将从代码示例开始,然后解释。
var user2 = {
handle :"mytext",
alertName: function() {
//var handle is not defined in the current lexical scope or globally.
alert(handle);
}
};
user2.handle; //"mytext"
user2.alertName() // gives error that handle is not defined in the console
说明:
你是在定义user2.alertName
。在此函数中,您调用alert(handle)
。从我所看到的handle
未在当前词法范围内定义,或全局定义,因此undefined
被警告。
var user2 = {
handle :"mytext",
alertName: function(handle){
alert(handle);
}
};
user2.handle; //"mytext"
user2.alertName() //gives undefined in the alert popup
说明:
您正在定义user2.alertName
。此功能采用提醒的参数。
当您调用user2.alertName()
时,您没有传递任何变量或文字。
因此,undefined
会被警告。
提醒user2.handle
使用:
user2.alertName(user2.handle);
我希望这有帮助,
里斯
答案 4 :(得分:0)
user2 = {
handle :"mytext",
alertName: function(){
alert(this.handle);}
};
user2.handle; //"mytext"
user2.alertName() // alerts "mytext"
handle是对象的属性,因此您需要通过引用该对象的对象来访问该对象的属性。