当前位置: 首页 > 知识库问答 >
问题:

Internet Explorer ECMAScript的Polyfill设置构造函数以允许iterable参数

杨雪松
2023-03-14

我使用MDN文档中描述的Set对象的构造函数编写了一些代码。不幸的是,Internet Explorer 11忽略构造函数中的任何iterable参数。我曾快速尝试过重写构造函数(下面的代码),但没有成功(Set.prototype.size返回-‘this’不是Set对象)。

var testSet = new Set([0]);
if (testSet.size === 0) {
    //constructor doesnt take an iterable as an argument - thanks IE
    var oldProto = Set.prototype
    Set = function (iterable) {
        if (iterable) {
            iterable.forEach(this.add.bind(this));
        }
    };
    Set.prototype = oldProto;
}

有没有一种方法允许Set构造函数传递一个可迭代的参数,并且仍然在即. e.中工作?我想下一个最好的选择是创建某种工厂方法(Set.create),返回一个新的Set实例。

共有1个答案

景成和
2023-03-14

您没有在该代码中创建新的Set实例。如果你想覆盖构造函数,你应该这样做

if (new Set([0]).size === 0) {
    //constructor doesnt take an iterable as an argument - thanks IE
    const BuiltinSet = Set;
    Set = function Set(iterable) {
        const set = new BuiltinSet();
        if (iterable) {
            iterable.forEach(set.add, set);
        }
        return set;
    };
    Set.prototype = BuiltinSet.prototype;
    Set.prototype.constructor = Set;
}
 类似资料:
  • 我有以下课程: 但当我想让name参数在第二个构造函数中不可变时: 我有以下编译时错误: 不允许在辅助构造函数参数上使用Kotlin:“val” 有人能解释为什么Kotlin编译器不允许这样做吗?

  • 1.如何通过参数化构造函数设置这些属性?? 类文件 > 我想通过传递参数构造函数的setter设置这些属性,但它没有设置这些属性 在这里,我想通过toString方法显示属性 }对象文件 为什么我无法通过构造函数设置这些属性?? public class Runnable{public static void main(String[]args){Product p1=新产品(“pc”,“Grey

  • 问题内容: 到目前为止,我已经看到了两种在Java中设置变量值的方法。有时使用带有参数的构造函数,而其他setter方法则用于设置每个变量的值。 我知道,一旦使用“新”关键字实例化了一个类,构造函数就会在类内部初始化一个实例变量。 但是,什么时候使用构造函数,何时使用setter? 问题答案: 当您要创建对象的新实例时,应使用构造函数方法,该实例的值已填充(准备使用的对象中已填充值)。这样,您无需

  • 问题内容: 我的代码中有内部类。我想授予对其实例的公共访问权限,但是只有外部类才可以创建此实例,就像在“私有”访问权限中一样。是否可以不做适当的小包装(或为每个这样的内部类创建公共接口)? (对不起,如果我的英语不好:P) 问题答案: 有可能的。将 内部类 声明为 public,但将其构造函数声明为private 。这样,您只能在封闭的类及其内部内部创建它,而不能从外部创建它。

  • 我正试图编写一个简单的CRUD程序,我得到了这个错误。这个项目是基于我的项目。不知道我为什么不工作。 如果我注释掉构造函数,错误就会消失。我的房子里什么都没有。 有人能帮我一把吗? 这是我的代码: 实体/食品。JAVA 仓库/FoodRepository.java 控制器/食物控制器。JAVA 主课 波姆。xml

  • 我正在浏览hibernate留档,文档说hibernate需要为我们所有的持久类提供一个no-arg构造函数: 无参数构造函数是所有持久类的要求;Hibernate必须使用Java反射为您创建对象。构造器可以是私有的,但是在没有字节码插装的情况下,运行时代理生成和有效的数据检索需要包或公共可见性。 但是当我通过创建一个没有任何无参数构造函数的POJO类并放置一个接受参数的构造函数来创建一个示例程序