发布日期:2025-04-01 浏览次数:
Binance Casino 提供专业的USDT加密赌场体验,支持USDT、比特币等多种数字货币投注。安全稳定,公平透明,秒速存取款,畅玩百家乐、老虎机、体育竞猜等热门游戏!立即注册,尊享丰厚奖励!
上述两种解决办法也可以看出 call 和 bind 的区别:call 方法是直接执行,而 bind 方法是返回一个新函数。
由于 bind 方法是从 ES5 才开始引入的,不是所有浏览器都支持,为了实现兼容,需要自己实现 bind 方法。
bind 方法会创建一个新函数。当这个新函数被调用时,bind 的第一个参数将作为它运行时的 this(该参数不能被重写), 之后的一序列参数将会在传递的实参前传入作为它的参数。新函数也能使用 new 操作符创建对象:这种行为就像把原函数当成构造器,提供的 this 值被忽略。
因为 bind 方法不是立即执行函数,需要返回一个待执行的函数,这里可以利用闭包:return function(){};
* 这里的 arguments 只是一个类数组对象,可以用数组的 slice 方法转化成标准格式数组
* 除了作用域对象 self 以外,后面的所有参数都需要作为数组进行参数传递
从测试执行结果可以看出,上面已经实现了作用域绑定,但是返回新函数 newFn 不支持传参,只能在 testFn 绑定时传参。因为我们最终需要使用的是 newFn,所以我们需要让 newFn 支持传参。
// 将新函数执行时的参数 arguments 全部数组化,然后与绑定时传参 arg 合并
可以看出,绑定时传的参数和新函数执行时传的参数是合并在一起形成完整参数的。
我们再回到 bind 方法的定义第二条:新函数也能使用 new 操作符创建对象。说明绑定后的新函数被 new 实例化之后,需要继承原函数的原型链方法,且绑定过程中提供的 this 被忽略(继承原函数的 this 对象),但是参数还是会使用。所以我们需要一个中转的函数将原型链传递下去。
创建一个空对象 a = {},并且 this 变量引用指向到这个空对象 a;
被实例化方法 b 的 this 对象的属性和方法将被加入到这个新的 this 引用的对象中:b 的属性和方法被加入的 a 里面;
* 如果是 new 操作,需要绑定 new 之后作用域,this 指向新的实例对象
本站部分资源来自于网络收集,若侵犯了你的隐私或版权,请及时联系我们删除有关信息。联系邮箱: