4

まず、私のコードを参照してください。

function test(){

    this.item = 'string';

    this.exec = function(){
        something();
    }

    function something(){
        console.log(this.item);
        console.log('string');
    }
}

そして、このコードのように、クラスを作成して「exec関数」を呼び出します

var t = new test();

t.exec();

しかし結果は…

undefined
string

何かの関数からtest.itemにアクセスしたい。

何か解決策はありますか?

4

4 に答える 4

6

の内部で適切に設定されるように、でsomething呼び出す必要があります。applythissomething

function test(){

    this.item = 'string';

    this.exec = function(){
        something.apply(this);
    }

    function something(){
        console.log(this.item);
        console.log('string');
    }
}

@aaronfay が指摘したように、これは、作成thisしたオブジェクトを参照していないために発生しますnew test()詳しくはこちらで読むことができますが、一般的なルールは次のとおりです。

関数が で呼び出された場合、 はobjectそのthisを参照しobjectます。関数が単独で呼び出される場合 (コードの場合のように)、thisはグローバル オブジェクトを参照します。これはブラウザーではwindow.

于 2013-10-02T06:09:53.073 に答える
2

選択肢はたくさんありますが、最後の 1 つをお勧めします。

var item = 'string'

また

this.exec = function(){
    something.apply(this, []);
}

また

var that = this;
function something(){
    console.log(that.item);
    console.log('string');
}
于 2013-10-02T06:10:46.480 に答える
2

this.itemsomething()あなたが思っているものではありません。

this値が異なります。この場合、それはグローバル オブジェクトです。

this私の意見では、最善の解決策は、内部関数内でアクセスできるへの参照を持つ変数を宣言することです。


function test() {
    var that = this; // a reference to 'this'

    function something() {
        console.log(that.item); // using the outer 'this'
        console.log('string');
    }

    this.item = 'string';

    this.exec = function(){
        something();
    }
}
于 2013-10-02T06:10:58.407 に答える