加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

让ie赏识器支持function.bind()的要领

发布时间:2018-10-02 23:28:25 所属栏目:创业 来源:站长网
导读:前端开拓者应该很清晰 Javscript 剧本的 function 函数工具可以通过 call 或 apply 要领,使其改变内部浸染域(this)所指向的工具,实现更多可扩展的成果开拓。ie 原生支持 function 工具的 call 和 apply 要领,在 firefox 或其余赏识器下也获得支持,可是

前端开拓者应该很清晰 Javscript 剧本的 function 函数工具可以通过 call 或 apply 要领,使其改变内部浸染域(this)所指向的工具,实现更多可扩展的成果开拓。ie 原生支持 function 工具的 call 和 apply 要领,在 firefox 或其余赏识器下也获得支持,可是 call 和 apply 要领是当即浸染并执行,譬喻:

var func = function () {
alert(this);
}.apply(window);

当剧本理会引擎执行到这段代码时,会当即弹出对话框并表现 object 字符串。我们的初志是想界说 func 要领浸染在 window 工具域上,并在后期挪用时再执行,可是 call 和 apply 要领并不能满意我们的初志,它们会当即获得执行。

在 google 一番技能资料后,发明 firefox 原生支持一个 bind 要领,该要领很好的满意了我们的初志,挪用要领与 call 和 apply 一样,只是界说完成后,在后期挪用时该要领才会执行。可是这个 bind 要领只有在 ie10 版本的赏识器才获得原生支持,低于该版本的赏识器下执行时会获得一个 undefined 的错误提醒。于是只好再次上网 google 办理方案,工夫不负有意人,我们在 firefox 的开拓站找到了办理方案,那就是增进 property 原型使得全部赏识器都能支持 bind 要领,代码如下:

if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5 internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}

var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(this instanceof fNOP && oThis
? this
: oThis,
aArgs.concat(Array.prototype.slice.call(arguments)));
};

fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();

return fBound;
};
}

看懂这段代码必要点功底,我只是知道怎样拿来用,假如哪位大牛有乐趣可以或许先容一下这段源码的道理,不胜谢谢,感谢!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读