继承模式:原型链继承
JavaScript中的每个函数中都有一个名为prototype的对象属性。该函数被new 操作符调用是会创建出一个对象,并且该对象中会有一个指向原型对象的秘密链接(_proto_)。我们就可以在新建的对象中调用相关原型对象的方法和属性。
function Shape(){ this.name = 'shape'; this.toString = function(){ return this.name; }; } function TwoDShape(){ this.name = '2D shape'; } function Triangle(side,height){ this.name = 'Triangle'; this.side = side; this.height = height; this.getArea = function(){ return this.side * this.height }; } TwoDShape.prototype = new Shape(); Triangle.prototype = new TwoDShape(); TwoDShape.prototype.constructor = TwoDShape; //必须 消除原型链的陷阱 Triangle.prototype.constructor = Triangle; //必须 消除原型链的陷阱 var my = new Triangle(5,10); my.getArea(); //25 my.toString(); //"Triangle"
var s = new Shape(); s.name; //"shape"
console.log(my instanceof Shape); //true console.log(my instanceof TwoDShape); //true console.log(my instanceof Triangle); //true
console.log(Shape.prototype.isPrototypeOf(my)); //true console.log(TwoDShape.prototype.isPrototypeOf(my)); //true console.log(Triangle.prototype.isPrototypeOf(my)); //true