1.改变this指向
var a = {
text: 1,
alert: function () {
console.log(this.text)
}
};
function b(cb) {
cb();
}
b(a.alert);
针对上述题,毫无疑问输出undefined,因为this指向window,如何让函数输出1,这里毫无疑问是改变this指向,即可以用bind,call,apply。但通过此题目可以学习到bind和后面两个的区别。
bind改变指向后,不会立即调用,bind会创建一个新函数,称为绑定函数,当调用这个函数的时候,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数;
而call和apply则会立即调用,所以此题可以改为
var a = {
text: 1,
alert: function () {
console.log(this.text)
}
};
function b(cb) {
cb.call(a);//其中一种版本
cb.apply(a);//第二种版本
cb.bind(a)();//第三种版本
}
b(a.alert);