最近我一直在使用 javaScript 原型(prototype)对象并遇到下面的示例。
function Foo(){
}
Foo.prototype=null;
var fooObj=new Foo();
当我从开发人员工具中查看 fooObj 时,__proto__
属性指向全局对象的原型(prototype),我可以访问对象原型(prototype)对象中定义的所有属性和函数。它应该指向 Foo 函数的原型(prototype)对象,因为我已经为它分配了 null,我期望 __proto__ 会指向 null,指向 __proto__ 可能更有意义,但我想理解对象创建后如何将值赋给__proto__
?是什么导致它指向 Object 的原型(prototype)对象?
我看到了很多关于原型(prototype)和原型(prototype)的问题,但没有一个能解决我的疑问。
最佳答案
完整详情请参见the specification *,但是当您使用带有 null
作为其 prototype
属性的构造函数时,new
会分配 Object.prototype
(好吧,领域的默认原型(prototype);Object.prototype
出于我们的目的)作为新对象的原型(prototype)。
我相信创建没有原型(prototype)的对象的唯一方法是Object.create(null)
。
通过 Object.setPrototypeOf
创建对象后,您可以将原型(prototype)设置为 null
,但一般来说,最好避免更改对象的原型(prototype)创建原型(prototype)后。
* 具体来说,它隐藏在 GetPrototypeFromConstructor
中,它表示如果构造函数的 prototype
属性的类型不是 Object(为此,null
的类型为 Null,而不是 Object 类型),则使用默认原型(prototype)领域。
关于javascript - javascript 中如何为 __proto__ 赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45566298/