javascript 学习笔记二【原型链模式】

基于构造函数的原型模式,解决了方法或者属性公有的问题->把实例之间相同的属性和方法提取成公有的属性和方法。

三个重要知识点.

1、每一个函数数据类型(普通函数,类),都有一个天生自带的属性prototype(原型),并且这个属性是一个对象数据类型的值。

2、在prototype上,浏览器天生给它加了一个属性constructor(构造函数),属性值是当前函数(类)本身。

3、每一个对象类型(普通的对象、实例、prototype...)也天生带一个属性:__proto__,属性值是当前实例所属类的原型(prototype)






原型链模式

f1 instance of  Object ->true 因为f1通过__proto__可以向上级查找,不管有多少级最后总能找到Object.

在Object.prototype上没有__proto__这个属性

f1.hasOwnProperty("x") //hasOwnProperty是f1的一个属性

但是我们发现在f1的私有属性上并没有这个方法,那如何处理的呢?

1、通过.对象名的方式获取属性值的时候,首先在对象的私有属性上进行查找,如果私有中存在这个属性,则获取的是私有属性的值。

如果私有的没有,则通过__proto__找到所属类型的原型(类的原型上定义的属性和方法都是当前实例共有的属性和方法),原型上存在的话,获取的是圆形上的属性值。

如果原型上也没有,怎继续通过原型上的__proto__继续向上查找,一直找到Object.Prototype为止,这种查找机制就是我们的原型链模式


某个方法中的this->看执行的时候“.”前面是谁this就是谁

1)需要确定this的指向(this是谁)

2)把this替换成对应的代码

3)按照原型链查找的机制,一步步的查找结果

“原型继承”是JS中最常见的一种继承方式,子类B想要继承父类A的所有属性和方法(私有+共有),只需要让B.prototype=new A 即可.

原型继承的特点:它是把父类私有的+共有的都继承到了子类原型上(子类共有的)。

核心:原型继承并不是把父类中的属性和方法克隆一份一模一样的给B,而是让B和A之间增加了原型链的链接,以后B的实例n想要A中的getX方法,

需要一级级的向上查找使用

猜你喜欢

转载自blog.csdn.net/liang5603/article/details/73866226