js里的对象(原型与原型链)

2018-10-07  本文已影响0人  索伯列夫

按照刚才帖子:

var a = 1
a.toString() //'1'

但是很显然,如果需要创建许多变量,不可能每一个变量都自带一个toString()方法。既然每个类型都有toString,那么在实现的时候,可以将toString单独列出来。

这时候我们新建一个对象,

var o1 = new Object()
o1.name = 'hua'
o1.age = 18

o1对象中,直接放了name与age,但是我们依然可以使用toString()方法,那么这个方法,在哪,如何建立联系。实际上这时候,给o1添加了一个属性proto,指向toString()等公用方法所在的地方。
这个时候,就是有再多的对象,都是这么一个方式:

对象
同样的道理,Number也是一样的:
number&object
看结果:
var n = new Number(1)
n.__proto__.__proto__.toString === 
o1.__proto__.toString //true

当number与object对象有很多时候,是这样的:


多个对象

多个不同类型的数据:


多个类型

运行如下代码:o1.__proto__ === Object.prototype //true

prototype与proto

首先需要明确,不写代码就有prototype。
在window对象下产生

不写代码
当然最后number,string,boolean需要指向object共用.
写了代码
可以看的很清楚,s.__proto__String的公用属性的引用,String.prototypeString的公用属性的引用:看代码:
var s = 'hi'
String.prototype === s.__proto__ //true

重要:
var 对象= new 函数()
对象.proto === 函数.prototype

var fn = new Function()
typeof fn //"function"

fn.__proto__ === Function.prototype //true

Function.__proto__ === Function.prototype //true
Function.__proto__ === Object.prototype //false
Function.prototype.__proto__ === Object.prototype //true

可以这样来看Function,首先它是一个对象,那么一定拥有proto,其次它是一个函数可以用来构造别的对象,那么就有prototype。

Function

原型链:JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

来自饥人谷上课笔记

上一篇下一篇

猜你喜欢

热点阅读