0

コンストラクターオブジェクトがあります。このコンストラクター内には、2 つの関数があります。1 つはwindow.onresizeと呼ばれ、もう 1 つはonBrowserResizeです。ここで、 window.onresize関数内でonBrowserResizeを呼び出したいと思います。どうすればいいですか?

function MyObject() {
    window.onresize = function(event) {
        this.onBrowserResize();
    }

    this.onBrowserResize = function() {
    }
}

次のように呼び出すことができるように、関数を公開したいと思います。object.onBrowserResize();

このように関数をプライベートにするvar onBrowserResize = function()と、スコープ外ではアクセスできなくなります。

誰でもそれを行う方法を知っていますか? 私はおそらく、オブジェクトのスコープについて少し混乱しています。

4

2 に答える 2

2

JavaScript では、this関数の呼び出し方によって の値が決まります。詳細については、MDN の記事をthis参照してください。

あなたの質問にはいくつかの詳細がありません。私の答えは、あなたがこのようなものを持っていると仮定しています:

var MyObj = function() {
    window.onresize = function(event) {
        this.onBrowserResize();
    }

    this.onBrowserResize = function() {}
}

これは次のようにインスタンス化されます:

var myObj = new MyObj();

これを達成するためのいくつかの方法を次に示します。

1. this.onBrowserResizeをイベント ハンドラーとして渡すだけです (onresize ハンドラーがすべて call を行う場合、最も簡単な方法ですonBrowserResize):

var MyObj = function() {
    window.onresize = this.onBrowserResize;
    this.onBrowserResize = function() {
        // caution: "this" here won't be your object.
        // use option 3 below if you need this to be your object
    }
}

2. local への参照のキャッシュthis:

var MyObj = function() {
    var that = this;
    window.onresize = function(event) {
        that.onBrowserResize();
    }

    this.onBrowserResize = function() {}
}

3. with の値をthis修正Function.prototype.bind:

var MyObj = function() {
    window.onresize = this.onBrowserResize.bind(this);

    this.onBrowserResize = function() {}
}
于 2012-12-05T12:00:00.917 に答える
1
//Constructor Object
function MyObject(){

};

MyObject.prototype.onWindowResize = function(){
  this.onBrowserResize();
}

MyObject.prototype.onBrowserResize = function(){

}

   //Implementation
   var myObject = new MyObject();
   myObject.onWindowResize();
   myObject.onBrowserResize();
于 2012-12-05T11:43:18.593 に答える