2

Javascript オブジェクトについて質問があります。親クラスのプロパティにアクセスするにはどうすればよいですか?

function randomObj() // for example button obj
{
    this.text = "this is obj";
}

function parentClass()
{
    this.name = "parent";
    this.subObj;
}

parentClass.prototype.generate = function()
{
    this.subObj = new randomObj();
    this.subObj.changeParentClassName = function() // button obj wants to change name
    {
        this.name = "not parent";
    }
}

var sampleObj = new parentClass();
sampleObj.generate();
sampleObj.subObj.changeParentClassName (); // does not works

「changeParentClassName」の「this」は subObj のようですが、parentclass.name にアクセスするにはどうすればよいですか?

4

1 に答える 1

7

JavaScriptは、関数を呼び出すときにthisの左側のオブジェクトになります。.この場合、それはparentObjではなくsubObjであるため、subObjに設定nameしています。2 つのオプションがあります。JavaScript のロジックに置き換えられないように、this内部に別の変数を入れることができます。何かのようなもの:generatethis

var parentObj = this;
this.subObj.changeParentClassName = function() // button obj wants to change name
{
    parentObj.name = "not parent";
};

thisまたは、bind() を使用して、既知のオブジェクト (この場合は親オブジェクト) にバインドされる新しい関数を作成できます。

this.subObj.changeParentClassName = (function() // button obj wants to change name
{
    this.name = "not parent";
}).bind(this); // bind the 'this' inside the changeParentClassName to the 'this' inside generate

バインドとインタラクティブな例の詳細については、Function bind()を確認してください。

Javascript の最近のバージョン (ECMAScript 6 以降) をターゲットにしている場合は、宣言するスコープと比較して=>の値を変更しない関数を使用できることに注意してください。thisしたがって、次を使用できます。

this.subObj.changeParentClassName = () => // button obj wants to change name
{
    this.name = "not parent";
};
于 2013-10-23T02:38:43.843 に答える