理论源于生活、又高于生活
在JS中“继承”,和现实生活中继承是类似的
如:儿子继承父亲财产、子女的生理特性有父母的特性(身高、肤色、性格等等....)
只是必定比例上是这样的,不是绝对的同样
冒充继承(也称之为借用构造函数)javascript
这种方法实现原理主要是利用了call/apply
// 定义父“类”(ES6以前JS中没有严格意义上的“类”概念) function Parent(name, age) { this.name = name this.age = age this.run = function () { console.log('run...') } } // 定义子”类“ Student.prototype.sid=200 function Student(name, age, sex) { var _super = Parent // call方法强制更改this指向,注意这个方向只是单纯的操做当前this对象,并不会影响到其“原型对象” _super.call(this, name, age) delete _super this.sex=sex } var student=new Student("zs",20,"Male") console.log(student.name) // zs console.log(student.sid) // 200
原型链继承java
// 定义父“类”(ES6以前JS中没有严格意义上的“类”概念) Parent.prototype.lastName='damon' function Parent() { this.lastName='pool' } // 定义子”类“ // 子类的原型指向父类的一个实例对象 Student.prototype=new Parent() function Student() { } var student=new Student() // 查找过程是怎么样的? /* 一、首先会在对象student自身身上查找, 二、若是找不到,则到原型上查找,那么student的原型是谁? student.__proto__===Student.prototype 而Student.prototype=new Student也就是原型如今指向的是父类的实例 三、因此到父类的实例上去查找,若是找不到,再到父类实例的原型上查找 四、若是找不到,则到原型的原型上查找,此时到了Object.prototype身上 Object.prototype.__proto__===null 五、若是找不到,则返回undefined */ console.log(student.lastName) // damon
还没有写完整,待续...