最近我一直在玩javaScript原型对象,并在下面举例说明。
function Foo(){
}
Foo.prototype=null;
var fooObj=new Foo();
当我从开发人员工具查看fooObj时,__proto__
属性指向全局Object的原型,我可以访问Object的原型对象中定义的所有属性和函数。应该指向Foo函数的原型对象,因为我已经为它指定了null,我期望__proto__
将指向null,指向__proto__
可能更有意义,但我想了解它的价值在创建对象后将其分配给__proto__
?是什么导致它指向对象的原型对象?
我见过很多关于原型和原型的问题,但没有一个能解决我的疑问。
答案 0 :(得分:1)
the specification *中的完整详细信息,但当您使用null
prototype
属性的构造函数时,new
会分配Object.prototype
(嗯,领域的默认原型;我们的目的是Object.prototype
)作为新对象的原型。
我认为创建没有原型的对象的唯一方法是Object.create(null)
。
通过null
创建对象后,您可以将原型设置为Object.setPrototypeOf
,但一般来说,最好避免更改对象&#39你创建它之后的原型。
*具体来说,它隐藏在GetPrototypeFromConstructor
中,它表示构造函数prototype
属性的类型是否为对象(为此目的,{ {1}}类型为Null,而不是类型Object),使用领域的默认原型。