面試題:如何用apply實現一個bind? ...
面試題:如何用apply實現一個bind?
Function.prototype._bind = function(target) {
// 保留調用_bind方法的對象
let _this = this;
// 接收保存傳入_bind方法中的參數,等價於arguments.slice(1),除了第一個參數其餘全視作傳入參數
let args = [].slice.call(arguments, 1)
return function() {
return _this.apply(target, args)
}
}
let obj = {
name: '測試員小陳'
}
// 測試函數
function test(args) {
console.log('this:', this);
console.log('我的名字:', this.name);
console.log('我接收的參數:', args);
}
console.log(test._bind(obj, "I am args")); // output: [Function]
test._bind(obj, "I am args")()
/* 執行結果
* this: { name: '測試員小陳' }
* 我的名字: 測試員小陳
* 我接收的參數: I am args
*/