Javascript 行为委托

        JavaScript 与C++,Java的面相对象编程的语言不同。就像不懂Linux人,会创造一个蹩脚的linux一样。一些JavaScript的编程总在尝试利用JavaScript 去模拟传统的面向对象编程。传统的面相对象编程是利用继承和多态两种机制实现代码的复用。继承的实质就是对父类的复制;多态是对父类方法的重写,在调用这个方法时,会根据调用的情况选择合适的方法。

    JavaScript  实现类的继承(即复制),使用混入机制:

function mixin(sourceObj,targetObj)
{
	for (var key in sourceObj)
	{
		if(!(key in targetObj))
		{
			targetObj[key] = sourceObj[key];
		}
	}
}
    ES6中为了实现类,新增加了关键字class,extends,super,用来实现传统的面相对象编程。然而,class语法并没有解决所有的问题。class基本上只是现在的prototype机制的一种语法糖。也就是说class并不会向传统的面向类的语言一样在声明是静态复制所有行为。如果你有意或者无意修改或者替换了父“类”中的一个方法,那子“类”和所有实例都会受到影响,因为它们在定义时并没有进行复制,只是使用基于prototype的实时委托。

     其实JavaScript的原型链是一种很好的实现代码复用的机制,行为委托就是基于原型链的一种实现代码复用的机制。

Task = {
	setID:function (ID){
		this.id = ID;
	},
	outputID:function (){
		console.log(this.id);
	}
};
//让XYZ委托Task
//XYZ = {};
//Object.setPrototypeOf(XYZ,Task);
//让XYZ的__proto__指向Task。
 XYZ = Object.create(Task);

XYZ.prepareTask = function(ID,Label){
	this.setID(ID);
	this.label = Label;
};

XYZ.outputTaskDetails = function(){
	this.outputID();
	console.log(this.label);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值