【问题标题】:Accessing variable inside object property访问对象属性内的变量
【发布时间】:2012-07-02 17:29:15
【问题描述】:

所以我遇到了一个问题。我有一个名为myTree 的对象。该对象具有属性。其中一个属性包含这样的方法:

prep: function (variable) {
    /* some code */
}

在那个方法中有一个数组myarray,我想知道,是否可以访问该数组的内容,如果可以,我会怎么做。

我在 jsFiddle 上做了一个演示,在 JavaScript 窗口的最后你可以看到我正在警告对象 prep,其中包含 myarray

http://jsfiddle.net/Wp7Xh/1/

【问题讨论】:

  • 在您的代码示例中,我注意到您将函数包装在括号中,例如 property : (function() {...}) 您能解释一下这是什么原因吗?
  • 但你不调用这些函数(在你的 jsfiddle 示例中),你不使用 (function() {...})(),你只是扭曲它们但不调用 (功能() {...})。有什么我不知道的原因还是这是错误(至少是多余的东西)?
  • @caligula 我在其他地方调用这个对象方法。这不是一个错误。我只想使用这些函数访问一些变量,但我遇到了问题。其他一切正常。

标签: javascript object scope


【解决方案1】:

JavaScript 变量是函数范围的。无法从外部范围访问属于内部范围的变量(即 "function")。

如果你想要这种访问,你必须使相应的变量成为外部作用域的一部分。

var myTree = function() {
  var myarray = [];

  this.prep = function (variable) {
    myarray.push(variable);
  };
}

在您有嵌套对象的场景中,情况非常相似:

var myTree = {
  myarray: [],
  prep: function (variable) {
    this.myarray.push(variable);
  }
}

唯一的区别是使用 this 关键字。

当您通过 object literal 语法 (obj = {prop: value}) 而不是通过构造函数 (function Obj(value) { this.prop = value; }; obj = new Obj(value);) 定义对象时,默认情况下所有定义的属性都将是“public”。

当您对该对象调用函数时,this 将指向相应的对象实例。

从外部访问“内部范围”变量仍然是不可能的。没有办法。

一般来说:您可以访问您构造的对象的属性。您永远不能访问函数局部变量(嵌套函数内部除外)。

【讨论】:

  • 第一个示例包含语法错误,看起来您打算将对象文字转换为函数,但在第一行代码中忘记了function ()
猜你喜欢
  • 2011-06-10
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多