javascript - javascript 中如何为 __proto__ 赋值?

标签 javascript inheritance prototype proto

最近我一直在使用 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/

相关文章:

java - 为什么调用父类方法?

Java Iterator<E>,类型 E 的继承

Javascript:将方法添加到函数原型(prototype)

javascript - 命名空间回调函数

javascript - 使用 queryselector 查找 ":"返回错误

c# - 如何在 Unity3d MonoDevelop 中使用继承?

javascript - 在 javascript 中,为什么 Array.constructor 指向函数?

javascript - 使用原型(prototype) JavaScript - 最佳实践

php - 我希望 php 页面首先加载其他信息,然后执行操作

javascript - Moment JS 日期到 C# 日期