6

それで問題が発生しました。と呼ばれるこのオブジェクトがありますmyTree。そして、そのオブジェクトにはプロパティがあります。プロパティの 1 つに、次のようなメソッドが含まれています。

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

そのメソッドには配列がありmyarray、その配列のコンテンツにアクセスできるかどうか、アクセスできる場合はどうすればよいかを知りたいです。

私は jsFiddle でデモを作成しました。JavaScript ウィンドウの最後で、含まprepれているオブジェクトに警告していることがわかりますmyarray

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

4

1 に答える 1

10

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キーワードの使用です。

コンストラクター ( ) ではなく、オブジェクト リテラル構文 ( )を使用してオブジェクトを定義すると、定義されたすべてのプロパティが既定で "public" になります。obj = {prop: value}function Obj(value) { this.prop = value; }; obj = new Obj(value);

そのオブジェクトで関数を呼び出すとthis、それぞれのオブジェクト インスタンスを指します。

外部から「内部スコープ」変数にアクセスすることは依然として不可能です。それを回避する方法はありません。

一般的に言えば、構築したオブジェクトのプロパティにアクセスできます。関数のローカル変数にアクセスすることはできません (ネストされた関数の内部からを除く)。

于 2012-07-02T09:56:52.580 に答える