首页 > Web开发 > 详细

你不知道的JS系列上( 47 ) - [[Prototype]]

时间:2020-04-09 09:55:56      阅读:71      评论:0      收藏:0      [点我收藏+]
JS中的对象有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时,[[Prototype]] 属性都会被赋予一个非空的值。
var myObject = {
  a:2
}
myObject.a;
[[Prototype]] 引用有什么用呢?比如当你试图引用对象的属性时会触发 [[Get]] 操作,比如 myObject.a,会触发 [[Get]] 操作,第一步是检查对象本身是否有这个属性,如果有的话就使用它。如果没有,就使用对象的 [[Prototype]] 链了。如果还么有,返回值是 undefined

 

var anotherObject = {
a: 2
}
var myObject = Object.create(anotherObject);
myObject.a; // 2

Object.create(...) 会创建一个对象并把这个对象的 [[Prototype]] 关联到指定的对象。现在 myObject 对象的 [[Prototype]] 关联到了 anotherObject。myObject.a 并不存在,但是还是找到了 2。

 

var anotherObject = {
  a: 2
}
var myObject = Object.create(anotherObject);
for(var k in myObject){
  console.log(‘found: ‘ + k)
} // found: a
(‘a‘ in myObject); // true

for...in 遍历对象原理和查找 [[Prototype]] 链类似,任何可以通过原型链访问到的属性都会被枚举。因此,通过各种语法进行属性查找时都会查找 [[Prototype]] 链,直到找到属性或者查找完整条原型链

 

你不知道的JS系列上( 47 ) - [[Prototype]]

原文:https://www.cnblogs.com/wzndkj/p/12664312.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!