2

次のようなクラスを作成すると:

function MyClass(input){
  // construct something;
  var myInstanceName = ???
}

インスタンスを作成するときにインスタンスの名前が必要になります...

var MyInstance = new MyClass("何かを作る");

ボタンを作成するメソッドがあり、「onclick」はこのインスタンスのメソッドを呼び出す必要があるため、myInstanceName (この場合は="MyInstance") を知る必要があります。

「this.name」を試しましたが、undefined が返されます... この値を取得するにはどうすればよいですか?

編集:これはテスト済みの実際の例です:

function MyClass(WhereGoesTheButton){
    this.myName = "Test"; // <-- here is the issue
    this.idButton = WhereGoesTheButton;
    //
}
MyClass.prototype.createButton = function(){
    document.getElementById(this.idButton).innerHTML = '<button id="myId" onclick="'+this.myName+'.callBack(this);">Press Here</button>';
}
MyClass.prototype.callBack = function(who){
    alert("Button "+who.id+" has been pressed!");
}
var Test = new MyClass("testArea");
//
function ini(){
    Test.createButton();
}

body onload ini() といくつかの div を含むページに配置してボタンを作成するだけです。

それは機能しますが、より良い慣行を備えた代替案は大歓迎です!

編集 2: これでうまくいきますが、インスタンスの名前はまだわかりません:

var MyClassId = 0;
function MyClass(WhereGoesTheButton){
    this.myButtonId = "MyClass"+String(MyClassId);
    MyClassId++;
    this.idButton = WhereGoesTheButton;
    //
}
MyClass.prototype.createButton = function(){
    var me = this;
    document.getElementById(this.idButton).innerHTML = '<button id="'+this.myButtonId+'" >Press Here</button>';
    document.getElementById(this.myButtonId).addEventListener("click", function(e){ me.callBack(this); }, false);
}
MyClass.prototype.callBack = function(who){
    alert("Button "+who.id+" has been pressed!");
}
var Test = new MyClass("testArea");
//
function ini(){
    Test.createButton();
}
4

4 に答える 4

3

簡単なコード例:

 function Parent(){
        // custom properties
    }

    Parent.prototype.getInstanceName = function(){
        for (var instance in window){
            if (window[instance] === this){
                return instance;
            }
        }
    };

    var child = new Parent();

    console.log(child.getInstanceName()); // outputs: "child"
于 2015-04-06T04:31:28.443 に答える
0

thisコンストラクター内でインスタンスを参照します。ただし、Javascript では、関数が呼び出されたときにthis動的に決定されることに注意してください。だからあなたが例えばなら。を賢明に使用せずにコンストラクターで使用してハンドラーを設定すると、エラーが発生する可能性があります。thisbind

詳細については、こちらを参照してくださいthis

于 2013-09-30T22:03:11.387 に答える