为什么可以检索原型但是__proto__在JavaScript中是未定义的?

zan*_*ngw 2 javascript prototype google-chrome v8

现在我学习JavaScript prototype__proto__,并发现一些有用的链接

__proto__ VS. JavaScript中的原型

__proto__与constructor.prototype有何不同?

我可以在Chrome下的以下代码中获取__proto__对象的值f.

var Foo = function() {}
var f = new Foo();
f.__proto__
> Foo {} 
Run Code Online (Sandbox Code Playgroud)

但是,设置后Foo.prototype.__proto__null,价值__proto__undefined.

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

但我能得到的价值f.name,这是cat.这是我的理解,因为值f.name可以检索,__proto__对象f应该指向Foo.prototype.为什么价值f.__proto__undefined

Bho*_*yar 5

__proto__是JavaScript的内部特殊属性.你不应该使用.

来自mdn

而Object.prototype.今天大多数浏览器都支持proto,它的存在和确切的行为只在ECMAScript 6规范中标准化,作为确保Web浏览器兼容性的传统功能.为了获得更好的支持,建议仅使用Object.getPrototypeOf().

  • 它回答了_"为什么`f .__ proto__`的值是'未定义'?"_ (3认同)
  • `__proto__` - 至少访问 - 是ECMA第6版,Chrome以这种方式支持*,请参阅[MDN的条目](https://developer.mozilla.org/en-US/docs/Web/的JavaScript /参考/ Global_Objects /对象/原).无论如何,这个"答案"没有解决问题.对评论使用评论. (2认同)