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.prototype
是String
的公用属性的引用:看代码:
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。
原型链:JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
来自饥人谷上课笔记