javascript 继承
1. 对象冒充
function ClassA(sColor) { this.color = sColor; this.sayColor = function () { console.log(this.color); } } function ClassB(sColor, sName) { this.newMethod = ClassA; this.newMethod(sColor); delete this.newMethod; this.name = sName; this.sayName = function() { console.log(this.name); } }
2. call()
function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName; this.sayName = function() { console.log(this.name); } }
3. apply()
function ClassB(sColor, sName) { //ClassA.apply(this, new Array(sColor)); ClassA.apply(this, arguments); this.name = sName; this.sayName = function() { console.log(this.name); } }
4. 原型链
function ClassA() {} ClassA.prototype.color = 'red'; ClassA.prototype.sayColor = function() { console.log(this.color); } function ClassB() {} ClassB.prototype = new ClassA(); ClassB.prototype.name = ''; ClassB.prototype.sayName = function() { console.log(this.name); } //instanceof var obj = new ClassB(); console.log(obj instanceof ClassA); //outputs 'true' console.log(obj instanceof ClassB); //outputs 'true'
5. 混合方式
function ClassA(sColor) { this.color = sColor; } ClassA.prototype.sayColor = function () { console.log(this.color); } function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName; } ClassB.prototype = new ClassA(); ClassB.prototype.sayName = function() { console.log(this.name); } //test var objA = new ClassA('red'); var objB = new ClassB('blue', 'Nicholas'); objA.sayColor(); objB.sayColor(); objB.sayName();
浙公网安备 33010602011771号