Skip to content

Latest commit

 

History

History
71 lines (57 loc) · 1 KB

1004-this.md

File metadata and controls

71 lines (57 loc) · 1 KB

this

/**
 * 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