You Don't Know JS: this & Object Prototypes( 第5章 Prototypes)
qu上章提到过[[prototype]] chain, 本章详细分析
⚠️所有试图模仿类复制的行为,如上章提到的mixins的变种,完全规避了[[Prototype]] chain机制,本章会谈到这方面
[[Prototype]]
一个特别的内建属性。用于引用到其他对象。当对象创建后,会得到一个这个属性的非空值。
例子
var anotherObject = {
a: 2
};
// create an object linked to `anotherObject`
var myObject = Object.create( anotherObject );
myObject.a; //
如果请求的属性没有在myObject上直接找到,默认的[[Get]]操作会沿原型链的连接去找。
点击查看:([[Get]]内容)
Object.create(..)此时可以简单理解为它创建一个对象,并用[[Prototype]] 关联的我们指定的对象上。
- 如果没有在anotherOject查找到对应属性名字,会继续沿着prototype查找,直到找到。
- 如果prototype chain结束后仍没有找到,则返回 undefined
类似[[Prototype]] chain的查询方式,
如果你使用for.. in循环一个对象,任何通过它的原型链条被查到的属性都会进行相关运算(enumerable:true才会被循环侦测到)。
for (var k in myObject) {
console.log("found: " + k);
}
// found: a
如果你使用in操作符号来测试一个属性是否存在于一个对象, in会检查整个原型链条(不考虑enumerable)
"a" in myObject // true
Object.prototype
这是一个原型链的最后端点! 内建的Object.prototype!
这个对象包括了大量普通的程序utilities用于全部JS。
所有正常的对象的原型链的终端都是它Object!
一些utilities,如.toString(), .valueOf(), hasOwnPreperty(..), 之后还会用到.isPrototypeOf()
anotherObject.isPrototypeOf(myObject)
// true , 用于查看一个对象是否是另一个个对象的原型(这个对象在另一个对象的正上面)
Setting & Shadowing Properties(避免避免避免!!1)
第3章提到了属性的设置更复杂,默认调用[[Put]]操作,有一系列的步骤。(点击)
myObject.foo = "bar";
首先判断myObject自身是否有foo属性,
- 有一个普通的data accessor 属性,就和改变已经存在的属性的值一样简单。
- 如果myObject自身没有这个foo属性,则先查看原型链条,
- 如果没有找到,则为myObject新增这个属性/值
- 如果在prototype chain找到foo,myObject.foo = "bar"这个声明行为有一些区别,见
You Don't Know JS: this & Object Prototypes( 第5章 Prototypes)的更多相关文章
- JS的Object漫想:从现象到“本质”
转自:http://zzy603.iteye.com/blog/973649 写的挺好,用于记录,把对象分成概念的Object(var f={})和 类的Object(function F(){}) ...
- js中Object.defineProperty()和defineProperties()
在介绍js中Object.defineProperty()和defineProperties()之前,我们了解下js中对象两种属性的类型:数据属性和访问器属性. 数据属性 数据属性包含一个数据的位置, ...
- js 之 object
js之object 对象 ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值.对象或函数”.严格来说,这意味着对象是无特定顺序的值的数组. 尽管 ECMAScrip ...
- You Don't Know JS: this & Object Prototypes( 第一章 this or That?)
Foreword this 关键字和prototypes 他们是用JS编程的基础.没有他们创建复杂的JS程序是不可能的. 我敢说大量的web developers从没有建立过JS Object,仅仅对 ...
- You Don't Know JS: this & Object Prototypes (第6章 Behavior Delegation)附加的ES6 class未读
本章深挖原型机制. [[Prototype]]比类更直接和简单! https://github.com/getify/You-Dont-Know-JS/blob/master/this%20%26%2 ...
- You Don't Know JS: this & Object Prototypes( 第4章 Mixing "Class" Objects)
本章移到“Object oriented programming”和"classes". 看‘class orientation‘ 的设计模式: instantiation, in ...
- You Don't Know JS: this & Object Prototypes( 第2章 this)
this is a binding made for each function invocation, based entirely on its call-site (how the functi ...
- You Don't Know JS: this & Object Prototypes( 第3章 对象)
前2章探索了this绑定指向不同的对象需要函数引用的call-site. 但是什么是对象,为什么我们需要指向它们? 本章探索细节. Syntax the rules that describe ho ...
- JS查看Object对象的内容
以一个例子来说,下面是他的Object: JS: 如果想直接获取到total的值,那就先把获取到的Json先Eval(),然后json.total就能取到total的值了, 但是如果想取到rows里面 ...
随机推荐
- clnt_create: RPC: Program not registered
原因:[root@nfs nfs]# systemctl start nfs-utils 解决方法:[root@nfs nfs]# systemctl start nfs
- topcoder srm 711 div1 -3
1.给出$n,k$,求一个大于等于$n$且最小的数字$m$使得$m$的二进制表示中存在连续$k$个1 . 思路:如果$n$满足,答案就是$n$.否则,依次枚举连续1的位置判断即可. #include ...
- 自动化测试系列:Selenium UI自动化解决iframe定位问题
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6735116.html 一个阴雨霏霏 ...
- fw-cloud-framework项目配置、启动问题
1.config组件:其配置优先级高于每个注册到同一个中心的工程的本地配置,所以在统一以dev这个 profile启动各个项目时,去config中心中找-dev结尾的各个工程名命名的文件. confi ...
- (转载)Rime输入法—鼠须管(Squirrel)词库添加及配置
为什么用Rime 13年底的时候,日本爆出百度的日本版本输入法的问题,要求政府人员停用,没当回事,反正我没用,当然了,有关搜狗和用户隐私有关的问题就一直没有中断过,也没太在意.但,前几天McAfee爆 ...
- CIFAR-10与ImageNet图像识别
2.1.2 下载CIFAR-10 数据 python cifar10_download.py # Copyright 2015 The TensorFlow Authors. All Rights R ...
- java中List,Set,Map用法以及区别
List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是. Collection是最基本的集合接口,一个Collection代表一组Object,即Collec ...
- 小程序之image图片实现宽度100%,高度自适应
哇 今天搞了半天 图片一直变形啊啊啊啊 宽度100% 高度给100% 给auto 完全不管用啊啊啊啊 然后最后最终!!!! 首先我们要给我们的图片一个100%的宽度!让它自适应!! .g ...
- 【Selenium2】【selenium之 定位以及切换frame(iframe)】
参考:http://blog.csdn.net/huilan_same/article/details/52200586 总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切, ...
- 【Django】【三】模型
[基本数据访问] 1. models.py写模型 2. 数据库迁移 guest> python manage.py makemigrations sign guest> python ma ...
- JS的Object漫想:从现象到“本质”