码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript prototype继承中的问题

时间:2015-04-13 16:32:58      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

function Person(name,sex){
    this.name=name;
    this.sex=sex;
}
Person.prototype.showName=function(){
    console.log(this.name);
}
Person.prototype.showSex=function(){
    console.log(this.sex);
}

Person.prototype.walk=function(){
    console.log("向前走");
}
Person.prototype.language="汉语";
//----------------------------------------------------

function Worker(name,sex,job){
    Person.call(this,name,sex);//调用父类构造
    this.job=job;
}

/*
 如果子类Woker以 Worker.prototype=Person.prototype 这样的方式继承时
 采用原型链的方式,此方式的缺点就是:
 1、父类中也会子类中独有的方法;
    Person.prototype.showJob

 2、子类如果重写父类中的属性和方法,那么父类中的属性和方法就会被覆盖掉
    p1.walk();//向后走
    console.log(p1.language)//English

 所以为了避免影响父类中的方法,采用for in
 */

//Worker.prototype=Person.prototype
for(var i in Person.prototype){
    Worker.prototype[i]=Person.prototype[i];
}

Worker.prototype.showJob=function(){
    console.log(this.job);
}

Worker.prototype.walk=function(){//采用原型链的方式会覆盖掉父类中的方法
    console.log("向后走");
}

Worker.prototype.language="English";


var p1=new Person("blue","男")
p1.showName();//blue
p1.showSex();//
p1.walk();//向前走
console.log(p1.language)//汉语

console.log(Person.prototype.showJob)//undefined  如果采用 Worker.prototype=Person.prototype 那么Person类中就有子类showJob独有的方法

var oWk=new Worker("John","男","设计师")
oWk.showName();
oWk.showSex();
oWk.showJob();
oWk.walk();
console.log(oWk.language)//English

 

JavaScript prototype继承中的问题

标签:

原文地址:http://www.cnblogs.com/eaysun/p/4422377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!