为什么可以检索原型,但在JavaScript中未定义_proto__)?

为什么可以检索原型,但在JavaScript中未定义_proto__)?,javascript,google-chrome,prototype,v8,Javascript,Google Chrome,Prototype,V8,现在我正在学习JavaScriptprototype和\uuuuuuuuuuuuuuuuuuu,并找到几个有用的链接 我可以在Chrome下的以下代码中获取对象f的\uu proto\uu的值 var Foo = function() {} var f = new Foo(); f.__proto__ > Foo {} 但是,在将Foo.prototype.\uuuu proto\uu设置为null后,\uuuu proto\uu的值为未定义 var Foo = function(

现在我正在学习JavaScript
prototype
\uuuuuuuuuuuuuuuuuuu
,并找到几个有用的链接

我可以在Chrome下的以下代码中获取对象
f
\uu proto\uu
的值

var Foo = function() {}
var f = new Foo();
f.__proto__
> Foo {} 
但是,在将
Foo.prototype.\uuuu proto\uu
设置为
null
后,
\uuuu proto\uu
的值为
未定义

var Foo = function() {}
Foo.prototype = {name: 'cat', age: 10};
Foo.prototype.__proto__ = null;
var f = new Foo();
f.__proto__
> undefined 

但是我可以得到
f.name
的值,即
cat
。我的理解是,由于值
f.name
可以检索,因此对象
f
\uuu proto\uuu
应该指向
Foo.prototype
。为什么
f.\uuuuu proto\uuuuu
的值是
未定义的

是JavaScript的一个内部特殊属性。你不应该使用

虽然Object.prototype.proto目前在大多数浏览器中都受支持,但它的存在和确切行为仅在ECMAScript 6规范中作为一项传统功能进行了标准化,以确保与web浏览器的兼容性。为了获得更好的支持,建议只使用Object.getPrototypeOf()来代替

\uuu protou\uu
是从
对象继承的访问器属性

由于实例
f
的原型链植根于
null
,而不是
Object.prototype
,因此
f
对象不会继承
Object.prototype
的任何属性,包括
Object.prototype.\uu proto\uu

对象仍然在内部知道它的原型(通过[[prototype]]内部插槽),但它不会继承用于获取此值的
\uuuuuuuuuu
访问器属性。不过,您仍然可以通过
Object.getPrototypeOf(f)
访问它

另见关于铬问题的决议:

这是工作的规定。ES6是在Object.prototype上定义的getter。对于原型链中没有的对象,它是不可访问的(就像hasOwnProperty不可访问一样)。您需要改用Object.getPrototypeOf


\uuuuu proto\uuuuu
-至少访问-在ECMA第6版中,并且以这种方式在Chrome中受支持,请参阅。无论如何,这个“答案”并没有解决所提出的问题。对…使用注释。。注释。它确实回答了“为什么
f.\uuuuu-proto\uuuuu
的值是
未定义的”
\uuuuu-proto\uuuu
既不是内部的,也不是特殊的。这个答案没有回答这个问题;这个答案回答了“我应该使用
\uuuuu proto\uuuuuuu
?”这个问题,这里没有问到这个问题。这也许可以作为一个评论。如果我在Biology.SE上问,“是什么化学成分使茄属植物如此有毒?”那么它并没有回答我的问题,而是告诉我,“茄属植物通常具有致命的毒性;你不应该吃它们。”我认为这实际上是一个体面的问题,即使行为(调查时)恰好是特定于浏览器的。询问了一个非常具体的案例/背景,这似乎与面值预期背道而驰<代码>\uuuu proto\uuuu
在Chrome和Firefox(以及WebKit?)中长期受支持,并在ES6中标准化。由于这现在是半事实行为(以及即将支持的行为),并且讨论了具体的上下文,“不应该使用”的“答案”并不是真正的答案,即使这样的陈述可能是一个很好的总结。我为这种行为打开了一个bug:我在7月份错误地回答了这个问题。我已经更正了我的答案。@apsillers,为什么最新的问题可以复制为我的问题,依我看,我的问题比复制的早。如果我遗漏了什么,请纠正我