0

最近我一直在玩 javaScript 原型对象,遇到了下面的例子。

function Foo(){ 

}

Foo.prototype=null;

var fooObj=new Foo();

当我从开发人员工具中查看 fooObj 时,该__proto__属性指向全局对象的原型,我可以访问对象原型对象中定义的所有属性和函数。它应该指向 Foo 函数的原型对象,因为我已经为它分配了 null 我期望__proto__将指向 null,指向__proto__可能更有意义,但我想了解__proto__在对象创建后如何分配值?是什么导致它指向 Object 的原型对象?

我看过很多关于原型和原型的问题,但没有一个能解决我的疑问。

4

1 回答 1

1

规范中的完整细节*,但是当您使用构造函数null作为其prototype属性时,new分配Object.prototype(嗯,领域的默认原型;Object.prototype为了我们的目的)作为新对象的原型。

我相信创建没有原型的对象的唯一方法是Object.create(null).

您可以在创建对象后通过将原型设置为,但通常最好避免在创建对象后更改它的原型。nullObject.setPrototypeOf


* 具体来说,它隐藏在 中GetPrototypeFromConstructor,它表示如果构造函数prototype属性的类型不是 Object(为此,null它是 Null 类型,而不是 Object 类型),则使用领域的默认原型。

于 2017-08-08T10:56:40.207 回答