原生JS学习笔记之继承:入门篇

原型继承

上帝创造了第一个男人亚当。把他安置在东方的伊甸园,后来取出他身上的肋骨为他造了女人夏娃,于是便有了人类,也有了原型继承。本质上原型继承是对现实中生物繁衍方式的一层抽象。

重要的事情说三遍:

__proto__ 为原型。 prototype 是构造函数上指向原型对象的指针, constructor 是原型上指向构造函数的指针

__proto__ 为原型。 prototype 是构造函数上指向原型对象的指针, constructor 是原型上指向构造函数的指针

__proto__ 为原型。 prototype 是构造函数上指向原型对象的指针, constructor 是原型上指向构造函数的指针

大致总结下上面的代码 当访问小明的钱属性时,如果小明有就返回小明的,如果小明没有,就返回大明的,如果还没有返回大明父亲的,依次向上查找(就是JS变量在作用域的查找机制有没有),而且还可以换爹,换爷爷哦。

大明说 什么父亲类,儿子类的。 我就是我,是不一样的爸爸(当我们的需求只是简单的定义两个对象的继承关系时,代码如下)

原型继承优势:

1.动态的改变已实例化对象的“属性”(继承自原型链且没有被覆盖的属性:动态改变原型属性)。

2.有时你只需要简单的定义两个对象的继承关系,不需要新建那么多类。


原型继承虽好,但也有尴尬的时候

原型继承的正确使用方式

正确用法应该是 构造函数写私有属性, 原型上写共享属性;

当子类需要继承父类构造函数中的私有属性时,我们可以借助call或者apply方法

ES6

有些看官 看到此 还是会说:我不听,我不听, 我就要跟java那样的 class 和 extends,上面的代码可改为如下:

看官们又说不就是语法糖嘛:我们是糖,甜到哀伤。确实是语法糖,但也不仅仅是语法糖

两条继承链。。。JS中 Class 也是对象,作为对象 Tiger类 继承自 Cat类。作为构造函数 ,Tiger的prototype 继承自Cat的prototype;

既然Tiger类是对象,那可以在Tiger类对象上定义属性来模拟java中的静态方法和静态属性

既然是对象,便可以定义getter,setter方法。

等同于

JS博大精深、暂时对继承的理解就这么多,错误之处还望指正。 —大飞。

发表评论

电子邮件地址不会被公开。 必填项已用*标注