是否可以在IE> = 9中创建一个函数,并将null作为原型? (比如下面的代码,不幸的是,它仅适用于Chrome,FF和Safari)
var F = function(){};
F.__proto__ = Object.create(null);
答案 0 :(得分:4)
不,如果不将[[prototype]]重新分配给函数对象,这是不可能的。 IE既不支持非标准__proto__
property也不支持ES6方法Object.setPrototypeOf
。
唯一的自定义可调用对象是使用函数表达式/声明或Function
constructor创建的函数。但是,所有这些方法都将创建具有[[prototype]] set to内置Function.prototype
object的函数对象。
F将用作构造函数(以编译为javascript语言)。但是代码会变得更复杂。核心思想是在此之后还会有一行
F.prototype = F
,因此从F创建的所有对象都将看到其类的属性;即f = new F(); F.foo = 123; print(f.foo);
不要那样做。虽然F是(构造函数)函数,但实例却不是,所以没有理由让它们继承它。只需将您的类属性编辑为F.prototype.foo = 123;
即可。或者编译对静态属性的任何访问(其中“实例看到类属性”)以使用F
对象,所以print(F.foo)
。