[英]Scope of an object literal within a function inside the object
我正在运行三个代码段。 第一个起作用,而第二个和第三个不起作用。 我不确定我是否理解第二个和第三个无效的原因。
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的子作用域。 我是否在这里错过了一些基本的东西。抱歉,这似乎是一个菜鸟问题,但我想我明白了,并一直回到这里。 而且,我在寻找文档时为何对第二个或第三个没有意义的地方一无所知。
在第二和第三代码中:
user2 = {
handle :"mytext", // handle is a property
alertName: function(){
alert(handle);}
};
由于句柄不是变量定义的,因此会出现错误。 在第三种情况下,您将句柄定义为方法签名中的参数,但未在调用中传递任何参数,因此它以未定义形式出现。
user2 = {
handle :"mytext",
alertName: function(){
alert(handle);}
};
user2.handle; //"mytext"
user2.alertName() // gives error that handle is not defined in the console
handle
是property
的的object
,所以你需要通过访问该对象的属性this
是指的object
。
alert(handle);
抛出错误,原因是它试图找到一个不在范围内的名为handle的变量。
如果globally
定义了变量句柄,则可以在user2
object
访问它。
var handle="google";
user2 = {
handle :"mytext",
alertName: function(){
alert(handle);}
};
alert(user2.handle); //"mytext"
user2.alertName() // gives error that handle is not defined in the console
在第二个示例中,函数“ alertName”需要参数“ handle”。 调用不带参数结果的user2.alertName()导致未定义。
对于作品应该是这样的:
user2.alertName(user2.handle);
我将从代码示例开始,然后进行解释。
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
,因此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);
我希望这有帮助,
里斯
user2 = {
handle :"mytext",
alertName: function(){
alert(this.handle);}
};
user2.handle; //"mytext"
user2.alertName() // alerts "mytext"
handle是对象的属性,因此您需要通过引用对象的对象来访问该对象的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.