繁体   English   中英

对象常量在对象内部函数内的范围

[英]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);}
        };
  1. “ handle”是对象user2的属性。
  2. 是您正在调用的方法的对象。
  3. “ handle”是方法“ alertName”内部的属性。

由于句柄不是变量定义的,因此会出现错误。 在第三种情况下,您将句柄定义为方法签名中的参数,但未在调用中传递任何参数,因此它以未定义形式出现。

user2 = { 
          handle :"mytext", 
          alertName: function(){
                     alert(handle);}
        };

user2.handle;  //"mytext"
user2.alertName()  // gives error that handle is not defined in the console

handleproperty的的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM