让ie赏识器支持function.bind()的要领
前端开拓者应该很清晰 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; }; } 看懂这段代码必要点功底,我只是知道怎样拿来用,假如哪位大牛有乐趣可以或许先容一下这段源码的道理,不胜谢谢,感谢! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |