对象内函数内对象字面量的范围
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"
到这里,我了解到handle是赋值给user2对象的,是user2对象上的一个key。因此,当我调用 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 的子范围的函数。
如果这看起来像是一个菜鸟问题,我是不是漏掉了一些基本的东西 here.Apologies,但我想我明白了,并且总是回到这里。关于为什么在查找文档时第二个或第三个没有意义,我无法在任何地方得到明确的答案。
在你的第二个和第三个代码中:
user2 = {
handle :"mytext", // handle is a property
alertName: function(){
alert(handle);}
};
- "handle" 是对象 user2 的 属性。
- this 是您正在调用方法的对象。
- "handle" 是方法 "alertName" 中 this 的 属性。
因为句柄不是定义的变量,因此出现错误。
在第三种情况下,您将 handle 定义为方法签名中的参数但未在调用中传递任何参数,因此它显示为未定义。
user2 = {
handle :"mytext",
alertName: function(){
alert(handle);}
};
user2.handle; //"mytext"
user2.alertName() // gives error that handle is not defined in the console
handle
是 object
的 property
,因此您需要通过 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
user2 = {
handle :"mytext",
alertName: function(){
alert(this.handle);}
};
user2.handle; //"mytext"
user2.alertName() // alerts "mytext"
handle是对象的属性,所以需要通过this引用对象来访问对象的属性。
在第二个示例中,函数 '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
被警告。
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是赋值给user2对象的,是user2对象上的一个key。因此,当我调用 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 的子范围的函数。 如果这看起来像是一个菜鸟问题,我是不是漏掉了一些基本的东西 here.Apologies,但我想我明白了,并且总是回到这里。关于为什么在查找文档时第二个或第三个没有意义,我无法在任何地方得到明确的答案。
在你的第二个和第三个代码中:
user2 = {
handle :"mytext", // handle is a property
alertName: function(){
alert(handle);}
};
- "handle" 是对象 user2 的 属性。
- this 是您正在调用方法的对象。
- "handle" 是方法 "alertName" 中 this 的 属性。
因为句柄不是定义的变量,因此出现错误。 在第三种情况下,您将 handle 定义为方法签名中的参数但未在调用中传递任何参数,因此它显示为未定义。
user2 = {
handle :"mytext",
alertName: function(){
alert(handle);}
};
user2.handle; //"mytext"
user2.alertName() // gives error that handle is not defined in the console
handle
是 object
的 property
,因此您需要通过 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
user2 = {
handle :"mytext",
alertName: function(){
alert(this.handle);}
};
user2.handle; //"mytext"
user2.alertName() // alerts "mytext"
handle是对象的属性,所以需要通过this引用对象来访问对象的属性。
在第二个示例中,函数 '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
被警告。
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);
希望对您有所帮助,
里斯