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/a616b3de81b948fda9a92db7e86bd171
function 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); }没有提词器不觉得很扯吗?