谷歌铬-为什么原型可以检索,但__proto__在JavaScript中未定义
google chrome - Why the prototype can be retrieved but the __proto__ is undefined in JavaScript?
现在我正在学习JavaScript prototype
和__proto__
,并找到了几个有用的链接
__proto__ VS JavaScript 中的原型
__proto__与constructor.prototype有何不同?
我可以在Chrome下的以下代码中获得对象f
的__proto__
的值。
var Foo = function() {}
var f = new Foo();
f.__proto__
> Foo {}
然而,在将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
但我可以得到f.name
的值,也就是cat
。这是我的理解,因为值f.name
是可检索的,所以对象f
的__proto__
应该指向Foo.prototype
。为什么f.__proto__
的值是undefined
?
__proto__
是JavaScript的内部特殊属性。你不应该使用。
来自mdn
虽然Object.protype.proto目前在大多数浏览器中都受到支持,但它的存在和确切行为仅在ECMAScript 6规范中作为一项遗留功能进行了标准化,以确保与web浏览器的兼容性。为了获得更好的支持,建议只使用Object.getPrototypeOf()。
根据ES2015规范,__proto__
是从Object.prototype
继承的访问器属性。
由于实例f
的原型链植根于null
,而不是Object.prototype
,因此f
对象不会从Object.prototype
继承任何属性,包括Object.prototype.__proto__
。
对象仍然在内部知道其原型(通过[[prototype]]内部插槽),但它没有继承用于获取此值的__proto__
访问器属性。不过,您仍然可以通过Object.getPrototypeOf(f)
访问它。
另请参阅Chromium问题的解决方案"如果原型链不包含Object.prototype
,则obj.__proto__
未定义":
这是按规定工作的。ES6 __proto__是在Object.prototype上定义的getter。对于原型链中没有getter的对象,它是不可访问的(就像hasOwnProperty不可访问一样)。您需要使用Object.getPrototypeOf。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- 从javascript中的对象获取所有proto函数
- 集合/实例对象样式为没有proto的vie javascript