7

私が持っているとしましょう

var myObject = {

  'myFunction' : function () {
    // something here that lets me get 'myObject'
  }

}

ここにあるさまざまな関数を試してみましたthis.constructor.nameが、返される値として常に「オブジェクト」を取得します。この状況で変数の実際の名前を取得する方法はありますか?

理由を説明するために編集して、人々がよりよく理解できるようにします... setIntervalで継続的に呼び出される関数を作成できるようにしたいです。このようなもの:

var myObject = {
  'intval' : '',
  'timeout' : 500,

  'start' : function () {
    this.objectName = 'myObject'; // <--I want this to be dynamically popped
    this.intval=window.setInterval("window['"+this.objectName+"'].myFunction()",this.timeout);
  },

  'stop' : function () {
    window.clearInterval(this.intval);
    this.intval='';
  },

  'myFunction' : function () {
    // do something
  }
}

これは、「myObject」を this.objectName にハードコードすると問題なく機能しますが、ハードコードしたくありません。問題は、setInterval("window[this.objectName]",100) becauseこのis not in the right context whensetInterval` を実行するだけではなく、オブジェクト名をハードコーディングしたくないことです。

4

4 に答える 4

5

いいえ、JavaScript ではできません。

于 2012-05-31T17:12:39.840 に答える
3

一方通行;

var myObject = {
    'myFunction' : function () {
        for (var name in window) {
            if (window[name] === this) { 
                alert(name);
                break;
            }
        }
     }
}

あまり良いIMOではありません。独自の名前空間でラップするとわずかに良くなります。

あなたもいつでも

var myObject = {
    moniker: "myObject",
    ...

更新に照らして、オブジェクトを解決する必要はまったくありません。

var myObject = {
    'intval' : '',
    'timeout' : 1500,
    'start' : function () {
        var self = this;
        this.intval = window.setInterval(function() {
            self.myFunction()
        }, this.timeout);
    },
    'myFunction' : function() {
        alert(this.intval);
    }
}
于 2012-05-31T17:21:31.347 に答える
1
for (var name in this.global)
      if (this.global[name] == this) 
        return name 

Javascriptでクラスオブジェクトの名前を文字列として取得するには?

于 2012-05-31T17:19:56.457 に答える
1

要するに、いいえ。

オブジェクトを作成する方法はmyObject、オブジェクト リテラルとの (比較的緩い) 関係を持つラベルにすぎません。Java または C++ の用語でmyObjectは、クラス名というよりポインタに似ています。ラベルとそれが参照するオブジェクトとの間のより強いリンクmyObjectが必要な場合は、コンストラクターまたはサブクラス パターンを使用する必要があります。しっかりした概要については、golimojo.com のこの記事を参照してください。

于 2012-05-31T17:37:09.220 に答える