原型 原型链 构造函数 继承

JS原型和原型链
window的全局有三个属性,object array function,他们都有许多 prototype ,prototype 有许多方法。这些方法以供在声明object array function 的时候调用。

之后我们声明一个对象 var a = {},我们要使用对象上的toString() 方法,怎么使用?每一个的对象都有__proto__这个属性,指向一个Object.prtotype ,在这上面找到这个 toString() 方法。
至于原型链,对象也有__proto__这个属性,寻找一个属性 或者 方法的时候,就会沿着原型链找,直到null

构造函数与继承

这里首先还是创建一个构造函数,之后通过new 创建一个新的对象。随货又创建了一个 Student 的类。
我们没有进行一个函数的复用,所以需要来复用Person 这个类。

一、这样直接调用这个函数的时候,this 指向的是window全局对象,二、如果要通过某个对象的方法进行调用的话,this指向的是方法前面的对象。
因为this总是指向拥有他的那个对象。
这时候我们需要使用call apply ,改变this 的指向,指向当前的这个 Student 这个对象

举个例子,上面的 Person 直接调用的时候this指向的是全局的window,使用Person.apply(p2) 这样的时候,this就指向 p2

使用 apply 进行一个this 指向的改变,传入this和这个 [name,age] 和这个参数。实现调用父类的函数,将父类的this 指向子类。

apply和 call 很像,只是参数的形式一个是数组,一个是一个个对象这样
这样就实现构造函数的继承。

有点问题就在于,方法通常是放在原型上的,属性放在对象上这种组合的形式来定义或叫创建基类 Person
在继承的时候只继承对象的部分,原型的部分是没有继承的,说到原型链的继承。

首先创建一个基类,将属行放在对象上,将方法放在原型上。

然后我们创建一个子类,在对象上继承基类的属性。之后让子类的原型指向基类的原型。再在子类的原型上添加别的方法,这样。

中间这一句的过程是 Sudent 的__proto__ 指向一个空对象,空的对象也有一个 proto 指向Person 的原型,这样在原型链上查找。

发布了11 篇原创文章 · 获赞 0 · 访问量 244

猜你喜欢

转载自blog.csdn.net/Douglas_Ryan_/article/details/105436551
今日推荐