function foo() { console.log(this.a); }; var obj = { a: 2 }; foo.call(obj); // 2
通过 foo.call(obj),调用 foo 时强制把它的 this 绑定到 obj 上。这种绑定是一种显示的强制绑定,我们称之为硬绑定
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); // 2 3 console.log(b); //5
硬绑定的典型应用场景就是创建一个包裹函数,传入所有的函数并返回接受到的所有值
function foo(something){ console.log(this.a, something); return this.a + something } var obj = { a: 2 } var bar = foo.bind(obj); var b = bar(3); // 2 3 console.log(b); //5
由于硬绑定是一种非常常用的模式,所以在 ES5 中提供了内置的方法 Function.prototype.bind。bind 会返回一个硬编码的新函数,它会把参数设置为 this 的 上下文并调用原始函数
原文:https://www.cnblogs.com/wzndkj/p/12424593.html