js继承

js继承:

一.父类构造函数继承:

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

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

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

二.原型的继承

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

 
 
  1. leader.prototype = new worker();
通过这行代码,我们相当于通过创建了一个worker实例,并将这个实例中的各个成员赋值给leader的原型,这样一来,对子类的修改仅仅影响worker的实例,而不会影响worker的原型。
 
 
  1. leader.prototype.startWork = function(){
  2. //some code here;
  3. };
  4.  
  5. var w = new worker("",0);
  6. var l = new leader("",0);
  7. 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/




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值