您的位置:首页 > Web前端 > JavaScript

js继承

2016-07-16 18:08 531 查看
js继承:

一.父类构造函数继承:

function leader(name,age){
worker.apply(this,arguments);
}


1.apply这是JavaScript内置的一个方法,只要是声明成为function的对象,都会拥有该成员。对于后台技术较高的同学,你可以将apply理解为反射调用。对于并不了解反射的同学,可以这样理解:我们正常情况下调用一个方法是对象.方法名(参数列表),使用apply的话,我们就是方法名.apply(对象,参数列表),顺序不一样了

2.arguments这个关键字只能在function内部使用,表示的是参数列表,在上述示例中arguments中包含的就是name和age
二.原型的继承

子类的修改不应该对父类造成影响。那我们不能让父类的原型直接赋给子类的原型,而用父类型的一个副本就行了。
leader.prototype = new worker();

通过这行代码,我们相当于通过创建了一个worker实例,并将这个实例中的各个成员赋值给leader的原型,这样一来,对子类的修改仅仅影响worker的实例,而不会影响worker的原型。
leader.prototype.startWork = function(){
//some code here;
};
 
var w = new worker("",0);
var l = new leader("",0);
document.write(w.startWork == l.startWork); //false

function worker(name, age){
this.name = name;
this.age = age;
this.isWorking = false;
}
worker.prototype.startWork = function(){
if(this.isWorking) return;
this.isWorking = true;
};

function leader(name, age){
worker.apply(this, arguments);
this.workers = [];
}
leader.prototype = new worker();	//重点
leader.prototype.startWork = function(){
//重写工人的开始工作方法
if(this.isWorking) return;
var workerLength = this.workers.length;
for(var i = 0; i < workerLength; i++){
this.workers[i].startWork();
}
};

var tom = new leader("tom",40);
var jim = new worker("jim",20);
tom.workers.push(jim);
tom.startWork();

var html = "tom和jim两个实例的startWork方法是否共用内存 : " + (tom.startWork == jim.startWork).toString();
document.write(html);


来源地址:http://www.hubwiz.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: