7

Java スクリプトでクラスをシミュレートしました。コードは次のとおりです。

function myclass()
{
    this.count ;

    this.init = function(){
        $("div.mybtn").click({n:this},function(e){
            e.data.n.count++;
        });
    }

    this.getCount = function(){
        alert(this.count);
    }
}

次に、このクラスのインスタンスを作成し、そのメソッドを実行しましたが、要素init()をクリックしてもdiv.mybtn、の値が増加しませんでしたthis.count
オブジェクトthisが参照ではなく値によってイベント ハンドラに渡されたようです。
参照によって変数をイベント ハンドラに渡すにはどうすればよいですか?

助けてくれてありがとう

4

3 に答える 3

3

Javascript には、参照渡しパラメーターがありません。必要に応じて、クロージャー変数を使用する必要があります。

this.init = function(){
    var self = this;
    $("div.mybtn").click(function(){
        self.count++;
    });
}
于 2013-07-16T06:01:19.223 に答える
1

バインド関数を作成し、コンテキストをイベント ハンドラーにバインドできます。

Function.prototype.bind = function(){
    var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift();

    return function(){
        fn.apply(object, args.concat(Array.prototype.slice.call(arguments)));
    }
}

function myclass()
{
    this.count ;

    this.clicked = function(){
        this.count++;    
    };

    this.init = function(){
        $("div.mybtn").click(this.clicked.bind(this));
    }

    this.getCount = function(){
        alert(this.count);
    }
}
于 2013-07-16T06:00:49.890 に答える