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里面 ...
随机推荐
- 没有使用Material组件
// 这个App没有使用Material组件, 如Scaffold. // 一般来说, app没有使用Scaffold的话,会有一个黑色的背景和一个默认为黑色的文本颜色. // 这个app,将背景色改 ...
- tp剩余未验证内容-5
经过实践, ie678是不能正确显示解析bs的,所以要用ff和chrome浏览器. page-header类是有特殊样式的 在标题下有一条浅色的细线条,源代码中有: border-bottom: 1p ...
- 用js互相调用iframe页面内的js函数
http://www.jb51.net/web/18555.html 1,首先获得右栏iframe对象 var frames=document.getElementById("frameid ...
- 深度学习课程笔记(十)Q-learning (Continuous Action)
深度学习课程笔记(十)Q-learning (Continuous Action) 2018-07-10 22:40:28 reference:https://www.youtube.com/watc ...
- Optical Flow related Tutorials
Optical Flow related Tutorials 2017-04-01 10:50:55 Reference: 1. http://blog.csdn.net/carson2005/art ...
- Hive安装部署及简单测试 网页《一》
1.首先关闭机器上之前配置的分布式Hadoop 命令: (在hadoop的安装目录中) sbin/stop-dfs.sh 关闭: yarn 命令: sbin/stop ...
- Scala的配置
Scala基于Java的JVM,所以先检查是否安装JDK. 在官网上下载并安装好了之后,就是配置环境变量了. SCALA_HOME 变量:C:\Program Files (x86)\scala. P ...
- latex 脚注编号也成为超链接
我们用LaTeX写文章时,往往会引用tabularx和hyperref两个包,当我们想让脚注编号也成为超链接以方便阅读时,往往会发现在hyperref包的属性里设置hyperfootnotes=tru ...
- SQL中 根据行号设置每行数据的排序数值
根据行号自动把当前行号插入到某列中 实现排序 update tempTable set DisplayOrder = right( CAST(rownum as NVARCHAR),5) from( ...
- 远程Service的显示 / 隐式启动
在进程间通信时,常会设计开启远程 Service 的情况.开启远程 Service 的方式有两种,一种时显示开启,一种是隐式开启.下面分别来看: 一.隐式开启 服务端:Service 所在 Andro ...
- JS的Object漫想:从现象到“本质”