bind
bind() 有什么用?我们先看一个常见的错误用法:
'use strict';
console.log('Hello, world!');
// 输出'Hello, world!'
var log = console.log;
log('Hello, world!');
// Uncaught TypeError: Illegal invocation
如果你想用 log() 取代 console.log() ,按照上面的做法是不行的,因为直接调用 log() 传入的 this 指针是 undefined ,必须这么用:
'use strict';
var log = console.log;
// 调用call并传入console对象作为this:
log.call(console, 'Hello, world!')
// 输出Hello, world!
这样搞多麻烦!还不如直接用 console.log() 。但是, bind() 可以帮我们把 console 对象直接绑定在 log() 的 this 指针上,以后调用 log() 就可以直接正常调用了:
'use strict';
var log = _.bind(console.log, console);
log('Hello, world!');
// 输出Hello, world!