浅谈JavaScript的面向对象思想(4)

this.age = age;
    this.getAge = function () {
        return this.age;
    }
 }
var fatherA = new FatherA("Tom");
var fatherB = new FatherB("Engineer");
var son = new Son("Jack","Programmer",18);
console.log(fatherA.getName());//Tom
console.log(fatherB.getJob());//Engineer
console.log(son.getName());//Jack//继承父类FatherA的getName()方法
console.log(son.getJob());//Programmer//继承父类FatherB的getJob()方法
console.log(son.getAge());//18
 

call()方法


function Father(name) {
    this.name = name ;
    this.getName = function () {
        return this.name;
    }
 }
function Son(name,job,age) {
    Father.call(this,name);

this.age = age;
    this.getAge = function () {
        return this.age;
    }
 }
var father = new Father("Tom");
var son = new Son("Jack","Programmer",18);
console.log(father.getName());//Tom
console.log(son.getName());//Jack//继承父类getName()方法
console.log(son.getAge());//18
 

多继承(利用call()方法实现多继承)


function FatherA(name) {
    this.name = name ;
    this.getName = function () {
        return this.name;
    }
 }
function FatherB(job) {
    this.job = job;
    this.getJob = function () {
        return this.job;
    }
 }
function Son(name,job,age) {
    FatherA.call(this,name);
    FatherB.call(this,job);

this.age = age;
    this.getAge = function () {
        return this.age;
    }
 }
var fatherA = new FatherA("Tom");
var fatherB = new FatherB("Engineer");
var son = new Son("Jack","Programmer",18);
console.log(fatherA.getName());//Tom
console.log(fatherB.getJob());//Engineer
console.log(son.getName());//Jack//继承父类FatherA的getName()方法
console.log(son.getJob());//Programmer//继承父类FatherB的getJob()方法
console.log(son.getAge());//18
 

apply()方法


function Father(name) {
    this.name = name ;
    this.getName = function () {
        return this.name;
    }
 }
function Son(name,job,age) {
    Father.apply(this,new Array(name));

this.age = age;
    this.getAge = function () {
        return this.age;
    }
 }
var father = new Father("Tom");
var son = new Son("Jack","Programmer",18);
console.log(father.getName());//Tom
console.log(son.getName());//Jack//继承父类getName()方法
console.log(son.getAge());//18
 

多继承(利用apply()方法实现多继承)


function FatherA(name) {
    this.name = name ;
    this.getName = function () {
        return this.name;
    }
 }
function FatherB(job) {
    this.job = job;
    this.getJob = function () {
        return this.job;
    }
 }
function Son(name,job,age) {
    FatherA.apply(this,new Array(name));
    FatherB.apply(this,new Array(job));

this.age = age;
    this.getAge = function () {
        return this.age;
    }
 }
var fatherA = new FatherA("Tom");
var fatherB = new FatherB("Engineer");
var son = new Son("Jack","Programmer",18);
console.log(fatherA.getName());//Tom
console.log(fatherB.getJob());//Engineer
console.log(son.getName());//Jack//继承父类FatherA的getName()方法
console.log(son.getJob());//Programmer//继承父类FatherB的getJob()方法
console.log(son.getAge());//18
 

原型链方法


function Father() {
 }
Father.prototype.name = "Tom";
Father.prototype.getName = function () {
  return this.name;
 };
function Son() {
 }
Son.prototype = new Father();
Son.prototype.age = 18;
Son.prototype.getAge = function () {
    return this.age;
 };
var father = new Father();
var son = new Son();
console.log(father.getName());//Tom
console.log(son.getName());//Tom//继承父类FatherA的getName()方法
console.log(son.getAge());//18
 

混合方式(call()+原型链)


function Father(name) {
    this.name = name;
 }
Father.prototype.getName = function () {
  return this.name;
 };
function Son(name,age) {
    Father.call(this,name);
    this.age = age;
 }
Son.prototype = new Father();
Son.prototype.getAge = function () {
    return this.age;
 };
var father = new Father("Tom");
var son = new Son("Jack",18);
console.log(father.getName());//Tom
console.log(son.getName());//Jack//继承父类Father的getName()方法
console.log(son.getAge());//18
 

多态机制实现

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/882e7416256eb145d8b5e8a58ec6a80d.html