对象冒充 (多继承):
a. 代码:
- function ClassA(sColor) {
- this.color = sColor;
- this.sayColor = function () {
- console.log(this.color);
- };
- }
- function ClassB(sName) {
- this.name = sName;
- this.sayName = function () {
- console.log(this.name);
- };
- }
- function ClassC(sColor, sName) {
- this.newMethod = ClassA;
- this.newMethod(sColor);
- delete this.newMethod;
- this.newMethod = ClassB;
- this.newMethod(sName);
- delete this.newMethod;
- }
- var objA = new ClassA("blue");
- var objC = new ClassC("red", "John");
- objA.sayColor();
- objC.sayColor();
- objC.sayName();
b. 输出:
blue red John
call() 方法 (推荐):
a. 代码:
- function ClassA(sColor) {
- this.color = sColor;
- this.sayColor = function () {
- console.log(this.color);
- };
- }
- function ClassB(sName) {
- this.name = sName;
- this.sayName = function () {
- console.log(this.name);
- };
- }
- function ClassC(sColor, sName) {
- ClassA.call(this,sColor)
- ClassB.call(this,sName)
- }
- var objA = new ClassA("blue");
- var objC = new ClassC("red", "John");
- objA.sayColor();
- objC.sayColor();
- objC.sayName();
b. 输出:
blue red John
apply() 方法 (推荐):
a. 代码:
- function ClassA(sColor) {
- this.color = sColor;
- this.sayColor = function () {
- console.log(this.color);
- };
- }
- function ClassB(sName) {
- this.name = sName;
- this.sayName = function () {
- console.log(this.name);
- };
- }
- function ClassC(sColor, sName) {
- ClassA.apply(this,new Array(sColor))
- ClassB.apply(this,new Array(sName))
- }
- var objA = new ClassA("blue");
- var objC = new ClassC("red", "John");
- objA.sayColor();
- objC.sayColor();
- objC.sayName();
b. 输出:
blue red John
原型链 (单继承):
a. 代码:
- function ClassA(color) {
- this.color = color
- this.sayColor = function () {
- console.log(this.color);
- };
- }
- function ClassB(name) {
- this.name = name
- this.sayName = function () {
- console.log(this.name);
- };
- }
- ClassB.prototype = new ClassA("red");
- var objA = new ClassA("blue");
- var objB = new ClassB("John");
- objA.sayColor();
- objB.sayColor();
- objB.sayName();
b. 输出:
blue red John
混用对象冒充与原型链 (多继承):
a. 代码:
- function ClassA(sColor) {
- this.color = sColor;
- this.sayColor = function(){
- console.log(this.color)
- }
- }
- function ClassB(sName) {
- this.name = sName;
- this.sayName = function(){
- console.log(this.name)
- }
- }
- function ClassC(sColor, sName) {
- ClassA.call(this, sColor);
- ClassB.call(this, sName);
- }
- ClassC.prototype = new ClassA();
- ClassC.prototype = new ClassB();
- var objA = new ClassA("blue");
- var objC = new ClassC("red", "John");
- objA.sayColor();
- objC.sayColor();
- objC.sayName();
b. 输出:
blue red John
说明:
推荐使用 call() 方法或 apply() 方法
来源: http://www.bubuko.com/infodetail-2531547.html