Dej*_*lic 5 javascript prototype-programming prototype-chain
__proto__当在对象中使用方括号时,__proto__是可枚举的。当没有提供方括号时,__proto__是不可枚举的。
例子:
obj = {"__proto__": "Hello"}
for (var k in obj)
{
console.log(k)
};
// No OutputRun Code Online (Sandbox Code Playgroud)
使用方括号
obj = {["__proto__"]: "Hello"}
for (var k in obj)
{
console.log(k)
};
// Output:
// __proto__Run Code Online (Sandbox Code Playgroud)
我知道使用方括号计算属性名称,但我不明白为什么一个是可枚举的,而另一个则不能。
这在规范中有所描述。的计算属性名称明确排除__proto__在检查之外,而允许正常的字符串值:isProtoSetter__proto__
- 如果 propKey 是 String 值
__proto__并且 IsCompulatedPropertyKey(PropertyName) 为 false,则
A。让 isProtoSetter 为 true。
- 别的,
A。让 isProtoSetter 为 false。
该isProtoSetter标志如果为 true,则表示创建的对象应该具有与该键配对的值的内部原型。对象__proto__的标准内部原型是不可枚举的 - 它存在于Object.prototype:
console.log(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__'));Run Code Online (Sandbox Code Playgroud)
当为 false 时,相当于拥有一个名为 的普通属性__proto__,并且对象初始值设定项中的普通属性变得可枚举。
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |