0

という感じでプロトタイプクラスを作っているのですが、文字列を関数名にして関数を呼び出したいです。ウィンドウ名を見つけました。例はどこかにありますが、私の場合は機能しません。

function someObj() {

  this.someMethod = function() {
    alert('boo'); 
    name = "someOtherMethod";
    window[name]();
  }

  var someOtherMethod = function() {
    alert('indirect reference');
  }

}
4

4 に答える 4

1

これは、関数内で定義されているオブジェクト"someOtherMethod"のメンバーではないためです。windowsomeObj

于 2012-09-29T18:49:06.823 に答える
0

windowグローバル変数専用です。

を使用しない限り、文字列を介してローカル変数にアクセスすることはできませんeval。これはほとんどの場合悪い考えです。

もう 1 つの方法は、オブジェクトを使用することです。これにより、文字列を使用してプロパティを検索できます。

function someObj() {

  var methods = {};

  methods.someMethod = function() {
    alert('boo'); 
    var name = "someOtherMethod";
    methods[name]();
  }

  methods.someOtherMethod = function() {
    alert('indirect reference');
  }

}
于 2012-09-29T18:49:02.473 に答える
0

someOtherMethod はウィンドウから隠され、プロトタイプのスコープ内にのみ存在します。

動かしてみてください。

function someObj() {
    this.someMethod = function() {
       alert('boo'); 
       name = "someOtherMethod";
       window[name]();
     }
}

var someOtherMethod = function() {
    alert('indirect reference');
}

グローバルを使用するのは悪い考えですが。

于 2012-09-29T18:49:42.230 に答える
0

メソッドの独自のハッシュを作成します。

function someObj() {

  this.someMethod = function() {
    alert('boo'); 
    name = "someOtherMethod";
    methods[name]();
  }

  var methods = {
    someOtherMethod : function() {
        alert('indirect reference');
    }
  };
}

変数は関数に対してローカルであるため、window. グローバル スコープで作業している場合でも、ウィンドウに依存するよりも独自のオブジェクトを使用する方が、名前の衝突を避けることができます。

于 2012-09-29T18:52:06.777 に答える