関数内でそれが であることを知っていますthis
。
var func = function {
return this.f === arguments.callee;
// => true, if bound to some object
// => false, if is bound to null, because this.f === undefined
}
var f = func; // not bound to anything;
var obj = {};
obj1.f = func; // bound to obj1 if called as obj1.f(), but not bound if called as func()
var bound = f.bind(obj2) // bound to obj2 if called as obj2.f() or as bound()
編集:
のプロパティにならないため、obj2.f()
実際に呼び出すことはできませんf
obj2
編集終了。
問題は、この関数の外で、関数がバインドされているオブジェクトを見つける方法です。
私はこれを達成したい:
function g(f) {
if (typeof(f) !== 'function') throw 'error: f should be function';
if (f.boundto() === obj)
// this code will run if g(obj1.f) was called
doSomething(f);
// ....
if (f.boundto() === obj2)
// this code will run if g(obj2.f) or g(bound) was called
doSomethingElse(f);
}
関数がバインドされているオブジェクトを変更せずに部分適用します。
function partial(f) {
return f.bind(f.boundto(), arguments.slice(1));
}
コンセンサス:
あなたはそれをすることはできません。持ち帰り:細心の注意を払って使用bind
してくださいthis
:)