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里面 ...
随机推荐
- was清除项目缓存数据
步骤 彻底清理删除后的项目缓存 删除${WAS_HOME}\AppServer\profiles\AppSrv01\config\cells\xxxxxNode01Cell/applications/ ...
- Materialize和Material Design Lite的区别
Material Design Lite是google官方库,Materialize是第三方 Material Design Lite不依赖jquery,Materialize依赖jquery Mat ...
- sha0dow0socks
秋水的一键安装脚本 #!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bi ...
- UVALive 7512 November 11th 题解
思路:心态大崩,最多不讲了,最少应该是三个一组,比如......应该是.S..S.,这样占的最多 代码: #include<set> #include<map> #includ ...
- 安装ubuntu的坑&RHEL7配置
1.需要其他设置->分区,分区需要有/根目录分区和swap空间,后者文件系统类型选择swap,其他都是ext4 2.普通配置电脑,安装16.04.5 LTS,不要安装最新的,安装重启后卡在那里, ...
- UML类图中箭头的含义
Explanation of the UML arrows Here's some explanations from the Visual Studio 2015 docs: UML Class D ...
- How to Install Apache Tomcat 8.5 on CentOS 7.3
How to Install Apache Tomcat 8.5 on CentOS 7.3 From: https://www.howtoforge.com/tutorial/how-to-inst ...
- P2120 [ZJOI2007]仓库建设(dp+斜率优化)
思路 首先暴力DP显然,可以得20分 加上一个前缀和优化,可以得到40分 然后上斜率优化 设\(sum_i\)为\(\sum_{1}^iP_i\),\(sump_i\)为\(\sum_{1}^{i}P ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB
推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...
- (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用
126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货 雷锋网 作者: 三川 2017-03-02 18:40:00 查看源网址 阅读数:66 如果你有非常大的决心从事深度学习,又不想在这一行打 ...
- JS的Object漫想:从现象到“本质”