在面向对象语言里,继承分为“接口继承” 和 “实现继承”,ECMAScript 只支持“实现继承”,“实现继承”主要依靠原型链实现。

原型链继承

》》 最常用,让原型对象指向另一个对象的实例

function A(){}
function B(){}​
B.prototype = new A()​

—————————————–

借用构造函数

》》 apply() 和 call() 又叫伪造对象或经典继承子类型构造函数的内部调用超类型构造函数

function(){
temp.call(this);
}

—————————————–

原型式继承

var anotherPerson = Object.create(person)

—————————————–

寄生式继承

》》 创建一个仅用于封装继承过程的函数,在函数内部增强对象

function(o){
​    var clone = object(o);
clone.sayHi = function(){};
return clone;
}

—————————————–

组合继承

》》因为各种方法都有优劣,以上方法可以自由组合

最近在看JavaScript书,看的我晕头转向,特别是作用域、闭包等概念很难分辩。不过很庆幸搞清楚一件事,就是this的4种绑定方式,我把大段的文字描述做成一张表与大家分享:(博客不能插表格,我转化一下:A表示‘定义‘,B表示’绑定结果’,C表示‘举例’)

new绑定

A:在new中调用​

B:​新创建对象

C:var bar = new foo()

————————

显式绑定

A:通过call、apply或硬绑定调用

B:指定对象

C:var bar = foo.call(obj2)

​————————

隐式绑定

A:在某个上下文对象中调用

B:上下文对象

C:var bar = obj1.foo()

————————​

​​默认绑定

A:不属于以上三种绑定方式

B:全局对象(严格模式,绑定undefined)

C:var bar = foo()