首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >function.bind()在IE8中不受支持。让它专门用于IE8浏览器吗?或者保持通俗

function.bind()在IE8中不受支持。让它专门用于IE8浏览器吗?或者保持通俗
EN

Stack Overflow用户
提问于 2015-06-15 04:23:57
回答 1查看 918关注 0票数 3

我在JS中使用function.bind(),这在IE8中是不受支持的,所以我在下面的代码中添加了使其工作的代码。(参考StackOverflow答案)

代码语言:javascript
复制
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;
      };
}

为所有浏览器保留此脚本代码,会不会使其他浏览器(如IE11 )速度变慢?(支持绑定)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 04:48:23

在已经有.bind()的浏览器中运行此代码的唯一缺点是要下载一些额外的代码。当这段代码在现代浏览器中运行时,它会命中第一个if语句并跳过其他所有内容。如果已经支持.bind(),则此填充不会替换现有功能。它看到现有的功能已经存在,所以它什么也不做。

像这样的填充物是很好的使用。它们允许您为现代浏览器(而不是最不常见的分母)编写代码,同时仍然支持较旧的浏览器。这种良好的填充物是强烈推荐的。

听起来你还不清楚这个脚本是怎么工作的。它所做的工作如下:

  1. 它检查.bind()是否已经在函数上可用。如果是的话,那么脚本就什么也不做了,因为它跳过了其余的代码。这就是在现代浏览器中发生的事情。因此,只有第一个if语句在现代浏览器中执行。
  2. 如果.bind()不存在,那么它将向Function原型添加一个名为bind的属性,这样它将在所有函数对象上可用,并为该属性分配一个函数。并且,该函数实现标准的.bind()行为。现在,无论在哪个浏览器中运行,代码中的所有函数对象都将具有一个.bind()属性。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30837332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档