function bindThis(f, oTarget) {
return f.bind?f.bind(oTarget):function(){return f.apply(oTarget,arguments)}
} 如果有bind函数直接调用,没有调用call和apply函数进行绑定,因为立即调用缘故采用匿名函数封装,call写法:function bindThis(f, oTarget) {
return f.bind?f.bind(oTarget):function(){return f.apply(oTarget,..arguments)}
} // 声明
function callback(arg1, arg2){}
function Func(callback){
return function(){
// 在该层封装函数中使用arguments对象取callback形参
}
}
// 调用
Func(callback)('形参1','形参2') // 方法一:apply
function bindThis(f, oTarget) {
return function() {
let args = [].slice.call(arguments)
return f.apply(oTarget,args)
}
} // 方法二:call
function bindThis(f, oTarget) {
return function() {
let args = [].slice.call(arguments)
return f.call(oTarget,...args)
}
} // 方法三:bind
function bindThis(f, oTarget) {
return f.bind(oTarget)
} // 方法四:将函数作为对象的方法调用
function bindThis(f, oTarget) {
// 使用call、apply、bind方法时,该函数是添加到对象原型上的
// oTarget.__proto__.fn = f
oTarget.fn = f
return function(){
let args = [].slice.call(arguments)
return oTarget.fn(...args)
}
} function bindThis(f, oTarget) {
return f.bind(oTarget);
} 链接:https://www.nowcoder.com/questionTerminal/a616b3de81b948fda9a92db7e86bd171function bindThis(f, oTarget) {
return function() {
return f.call(oTarget,...arguments);
}
} function bindThis(f, oTarget) {
return f.bind(oTarget);
} function bindThis(f, oTarget) {
return function() {
return f.apply(oTarget, arguments);
}
} // apply
function bindThis(f, oTarget) {
return function() {
return f.apply(oTarget, arguments);
}
}
// call
function bindThis(f, oTarget) {
return function() {
return f.call(oTarget, ...arguments);
}
}
// bind
function bindThis(f, oTarget) {
return f.bind(oTarget);
} 没有提词器不觉得很扯吗?