this
このコンテキストでは同じになります。アクセスできなくなるのはmyVal
. Function.bind
原本保持(通話時間)の指定ができないので使えないのは正解です。this
の変更されたバージョンを使用して、呼び出してmyVal
いる同じを渡し、保持する方法は次のとおりです。this
Function.bind
myBind
/**
* Binds the given function to the given context and arguments.
*
* @param {function} fun The function to be bound
* @param {object} context What to use as `this`, defaults
* to the call time `this`
* @param {object[]} customArgs Custom args to be inserted into the call
* @param {number} index Where to insert the arguments in relationship
* to the call time arguments, negative numbers count from the end.
That is, -1 to insert at the end. Defaults to a 0 (beginning of list).
*
*/
function myBind(fun, context, customArgs, index) {
return function() {
// Default the index
index = index || 0;
// Create the arguments to be passed, using an old trick
// to make arguments be a real array
var newArgs = Array.prototype.slice.call(arguments, 0);
// Tack the customArgs to the call time args where the user requested
var spliceArgs = [index, 0].concat(customArgs);
newArgs.splice.apply(newArgs, spliceArgs);
// Finally, make that call
return fun.apply(context || this, newArgs);
}
}
function Save() {
myVal = 3.14 // some arbitrary value
$('#myID').each(
// myFunction wil be called with myVal as its last parameter
myBind(myFunction, null, [myVal], -1)
);
}
function myFunction(index, element, myVal) {
if ($(this).val() === myVal) {
// do it here
}
}
この関数の柔軟性を示すために、複数の引数をバインドしてみましょう。呼び出し時の引数の先頭に挿入する必要があります
function Save() {
var myVal = 3.14, val2 = 6.28; // some arbitrary values
$('#myID').each(
// myFunction wil be called with myVal and val2 as its first parameter
myBind(myFunction, null, [myVal, val2], 0);
);
}
// Since I don't need element, it's already available as this, we don't
// declare the element parameter here
function myFunction(myVal, val2, index) {
if ($(this).val() === myVal || $(this.val() === val2)) {
// do it here
}
}
これは Samuel Caillerie とほぼ同じ答えです。唯一の違いは、Function.bind
bindthis
ではなく、引数だけの別のバージョンを作成することです。このバージョンのもう 1 つの利点は、バインドされた引数を挿入する場所を選択できることです。