我试图找出如何测试变量是否是特定绑定函数的实例.请考虑以下示例:
var func = function( arg ) {
// code here
}
myFunc = func.bind( null, 'val' );
if( myFunc == func ) {
console.log( true );
} else {
console.log( false );
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这导致错误.是否有某种方法来测试变量以找出它绑定的函数?
不,没有办法做到这一点. .bind()返回一个内部调用原始函数的新函数.该新功能上没有用于检索原始功能的接口.
按照ECMAScript规范15.3.4.5,返回的"绑定"功能将有内部属性[[TargetFunction]],[[BoundThis]]和[[BoundArgs]],但这些属性是不公开.
如果您告诉我们您尝试解决的更高级别问题,我们可能会提出不同类型的解决方案.
如果您自己控制.bind()操作,可以将原始函数作为属性放在绑定函数上,并且可以测试该属性:
var func = function( arg ) {
// code here
}
myFunc = func.bind( null, 'val' );
myFunc.origFn = func;
if( myFunc === func || myFunc.origFn === func) {
console.log( true );
} else {
console.log( false );
}
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/jfriend00/e2gq6n8y/
您甚至可以自行.bind()更换自己的替代品.
function bind2(fn) {
// make copy of args and remove the fn argument
var args = Array.prototype.slice.call(arguments, 1);
var b = fn.bind.apply(fn, args);
b.origFn = fn;
return b;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |