使用空原型创建一个函数对象

时间:2013-11-19 16:31:55

标签: javascript prototype

是否可以在IE> = 9中创建一个函数,并将null作为原型? (比如下面的代码,不幸的是,它仅适用于Chrome,FF和Safari)

var F = function(){};
F.__proto__ = Object.create(null);

1 个答案:

答案 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)