【问题标题】:Why doesn't the instance variable take the new value为什么实例变量不取新值
【发布时间】:2011-06-06 22:15:43
【问题描述】:

这是一个代码示例:

var testObject =
{
   val1:  1,

   testing:  function( )
   {
      val1 = 2;
      alert( val1 );
   }
};

alert 打印 val1 时怎么会显示未定义?

【问题讨论】:

  • val1 应该提醒2。尝试在jsfiddle.net 创建一个重现问题的示例。

标签: javascript instance-variables object-literal


【解决方案1】:

不,不是http://jsfiddle.net/qmLMV/

注意val1: 1是一个属性,而函数体内的val1 = 2;是一个变量。与所有变量一样,它将经历标识符解析。在这种情况下,您正在创建一个应该避免的隐式全局变量。事先声明你的变量。

function() {
    var val1 = 2;
}

还要注意这一点:

var testObject = {
   val1:  1,
   testing: function() {
      var val1 = 2;

      alert(val1); // alerts 2
      alert(this.val1); // alerts 1
   }
};

使用this 从对象的方法中访问对象的属性。

【讨论】:

  • @dave,希望您能完整查看答案,因为它指出您正在尝试引用 testObjectval1 属性,但您引用的是隐式全局 @987654329 @ 多变的。如果您稍后尝试直接访问该属性(它将始终设置为1),这可能会产生各种问题,并且如果出于任何原因他们希望访问显式全局val1,则可能会与其他脚本发生冲突变量。
猜你喜欢
  • 2016-05-27
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2012-05-20
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
相关资源
最近更新 更多