原型链

看下面一组代码:

son在查找lastName的时候会逐个往上查找,自己对象空间找不到,沿着自己的proto(__proto__ : Son.prototype--->father),去father中查找,然后再father对象空间中也没有找到lastName,所以再沿着father的proto(__proto__ : Father.prototype---->Grand),去Grand中查找,返回lastName的值

这样把原型上面再加一个原型,再加一个原型,作成链式,访问顺序也是链式,这样的操作就是原型链

那么原型链的终端是什么呢?

首先在上面,我们先看看Grand的原型,即Grand.propotype

发现这里也有一个proto,那么我们现在来看看Grand.propotype.__propo__里面有什么,

发现里面不在有propo了

返回null,说明Object就是终端了

对于原型链上的增删改查,都需要对父级元素做对于的操作,在子元素上操作只会应用到其本身和子孙元素

在看下面:

这种修改是对应用值的修改

son.fortune.card2  其实是对引用值的一种调用,不算是赋值

看下面的题目:

this指向的是,谁调用这个方法,this就指向谁

Object.create(原型)  也可以创建对象,里面填加的是所要创建对象的原型,

里面可以添加对象或者null

 

发现里面啥都没有

人为的加上proto系统是不会识别的

绝大多数对象最终都会继承自Object.prototype
所以可以理解undefined和null为什么没有toString了,因为他们两个就是原始值,也无法通过包装类变成对象,自然也就没有了toString方法,记得NaN是由toString方法的

这样是不行的,因为后面的点会优先被处理成浮点型数字的点,下面这种方式就可以了

但是这个toString()方法不太一样,首先讲一下num在“.toString()”的时候,会先调用包装类,将其打包成Number对象,

Number的父级有toString方法,但是Number里面又重写了一个名字一模一样但是功能却不同的函数,这就是重写

Object.prototype.toString(原生)

Number.prototype.toString(重写)

Array.prototype.toString(重写)

Boolean.prototype.toString(重写)

String.prototype.toString(重写)

再来看看以前使用的document.write,

\

这说明了document.write在返回的时候会调用toString方法,返回toString之后的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值