/**
* this 绑定
* 默认绑定 -> 全局绑定
* 隐式绑定
* 显式绑定
* new 绑定
*/
// 创建一个包裹函数,负责接收参数并返回值
function foo(something) {
console.log(this.a, something)
return this.a + something
}
var obj = {
a: 2
}
var bar = function() {
return foo.apply(obj, arguments)
}
var b = bar(3)
console.log({b})
function foo(something) {
console.log(this.a, something)
return this.a + something
}
var obj = {
a: 2
}
// 重复使用得包裹函数
function bind(fn, obj) {
return function() {
return fn.apply(obj, arguments)
}
}
var bar = bind(foo, obj)
var b = bar(3)
console.log({b})
/**
* 被忽略的 this
* 1.把数组展开成参数
* 2.使用bind进行柯里化
*/
function foo(a, b) {
console.log(`a: ${a}, b: ${b}`)
}
// DMZ空对象
var ø = Object.create(null);
// 把数组展开成参数
foo.apply(ø, [1, 2]); // a: 1, b: 2
// 使用bind进行柯里化
foo.bind(ø, 4)(3); // a: 4, b: 3