1、示例代码
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>bind函数绑定this指向</title>
</head>
<body>
<script type="text/javascript">
window.color = "red";
var o = {
color: "blue"
};
function sayColor() {
console.log(this.color);
}
sayColor(); //输出:red
//绑定this指向
var objectSayColor = sayColor.bind(o); //this指向o
objectSayColor(); //输出:blue
</script>
</body>
</html>
2、说明
sayColor() 调用 bind() 并传入对象 o ,创建了 o bjectSayColor() 函数。 object-SayColor() 函数的 this 值等于 o ,因此即使是在全局作用域中调用这个函数,也会看到 "blue" 。
3、与call、apply区别
bind与apply、call最大的区别就是:bind不会立即调用,其他两个会立即调用
bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被bind的第一个参数指定,其余的参数将作为新函数的参数供调用时使用。那bind创建的这个新函数还有其他什么特性吗?
这些API的特点以及具体用法我就不介绍了,相信你如果奔着手动实现的方向来看,那么你一定对它很了解,核心: this永远指向最后调用它的对象
你看,我一直在使用JavaScript中的bind()试验。事实证明,我们可以在多个场合,包括处理我几周前提到的闭包问题中,使用bind。
bind 和 apply,call 是 JS 修改 this 指向的三把利器 。对于 apply,call 来说,bind 的区别在于会返回一个修改了 this 指向的新函数,并不会立即执行。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!