2017-08-02 7 views
0

私は以下の関数を作成し、クリックでクリックカウントを取得しました。それは動作しますが、問題は、funcを呼び出すときに、funcにclickCountが持つオブジェクトコンテキスト(つまりthis)がないことです。オブジェクトコンテキストを渡す方法

この質問を作成する際、StackOverflowは、関数がコンテキスト(または?)で定義されていることを除いて、私が望むほとんどの答えである以下のリンクを示しました。私は

How to pass object context to an anonymous function?

がどのように私はclickCountはでFUNCに私の呼び出しでこれを渡すことができます私のclickCountはハンドラにコンテキストを適用したいですか?

var clickCountObj = { //this is in the global context 
    'clickTime' : 400 
}; 


$.fn.clickCount = function (func) { 
    $(this).click(function(e) { 
    if (!clickCountObj.prevClickTime || clickCountObj.prevClickTime < Date.now() - clickCountObj.clickTime) { 
     clickCountObj.clickCnt = 1; 
    } else { 
     clickCountObj.clickCnt = clickCountObj.clickCnt + 1; 
    } 
    clickCountObj.prevClickTime = Date.now(); 
    func(clickCountObj.clickCnt, e); 
    }); 
} 

答えて

1

あなたが探しているのはcallです。関数を呼び出してthisを第1引数と同じにすることができます。

function displayName(greeting) { 
 
    console.log(`${greeting}, I am ${this.first} ${this.last}`); 
 
} 
 

 
let me = { 
 
    first: 'Mike', 
 
    last: 'C' 
 
}; 
 

 
displayName.call(me, 'Hello');

あなたは配列として追加の引数を渡すことを好むだろう場合にもapplyを使用することができます。

function displayName(greeting) { 
 
    console.log(`${greeting}, I am ${this.first} ${this.last}`); 
 
} 
 

 
let me = { 
 
    first: 'Mike', 
 
    last: 'C' 
 
}; 
 

 
displayName.apply(me, ['Hello']);

具体的にあなたのケースのために、

func.call(this, clickCountObj.clickCnt, e); 
を試してみてください
関連する問題