javascript - ECMAScript中bind().call()用法问题

查看:152
本文介绍了javascript - ECMAScript中bind().call()用法问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var b = {
  dam: 'bdam'
}

var c = {
  dam: 'cdam'
}

function ceshi(){
  return this.dam;
}

ceshi.bind(b).call(c); // bdam

个人理解中,以上这段代码,bind将ceshi方法所对应的this对象指向b,然后call(c)应该继续将this指向到c上。从而输出结果为cdam。
但是实际的执行结果是bdam,原因是什么?

解决方案

一开始我对其输出百思不得其解,所以搜集了关于bind的函数的实现原理:

可以看出,bind返回一个函数,在a.foo.bind(b).call(c),call(c)只是将bind返回的匿名函数 function(){ }的window对象改为c对象,也就是由window.function(){ } 改为 c.function(){ },但是由于闭包,外部依然可以读取bind函数中的局部变量 context,也就是说context参数的值依然是刚开始传入的 b 对象,所以说 bind绑定是永久的


本人拙见~~~

这篇关于javascript - ECMAScript中bind().call()用法问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆