- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Javascript模拟实现接口、多继承
在Javascript模拟实现接口、多继承[模式]
2007-01-25 17:56
?
在其他语言中比如C#、Java,接口方法在定义的时候都是未实现的,而我这里模拟的JS接口则是可以在定义的时候实现的。
定义接口:
var IClassManager = {
hasClass:function(className){},
addClass:function(className){}
};
定义菜单类:
var Menu = function(options){
this._element = null;
this.setXY = function(x,y){
if (x) this._element.style.left = x + px;
if (y) this._element.style.top = y + px;
}
};
定义菜单项类:
var MenuItem = function(){
this.setText = function(){
};
}
其实菜单类和菜单项类都是基于HTMLElement的抽象,因此如果要让他们可以灵活的定义HTMLElement样式,那么都需要一组管理className的方法。因此Menu和MenuItem都需要实现IClassManager。辅助实现接口的方法:
var extend = function(dest, source){ //实现接口
dest = self || {};
for (property in source) {
if (!dest[property]) //如果dest也就是类没有同名的方法,则用接口默认实现方法。
dest[property] = dest[property];
}
return dest;
}
extend(Menu.prototype, IClassManager);
extend(MenuItem.prototype, IClassManager);
这样Menu和MenuItem都具有了Class的管理能力。
?
通过extend,Menu和MenuItem可以实现任意的接口,并且同时实现多个接口。
在实现接口之前Menu和MenuItem还可以有一次继承的机会:
Menu.prototype = new BaseClass(); //最简单的继承方式
然后再实现接口:extend(Menu.prototype, IClassManager);
?
这样就类似单根继承+多接口实现,很像C#或者Java吧
下面是完整的代码:
?(function(){
var Event = joyeach.util.Event;
var extend = function(dest, source){ //实现接口
dest = self || {};
for (property in source) {
if (!dest[property])
dest[property] = dest[property];
}
return dest;
}
//Class Manager Interface
var IClassManager= {
hasClass:function(className){
var reg = new RegExp((?:^|\\s+) + className + (?:\\s+|$));
return reg.test(this._element[className]);
},
addClass:function(className){
if (this.hasClass(el, className))? return;?
this._element[className] = [this._element[className], className].join( );
}}
/**
* 菜单类
*/
joyeach.controls.Menu = function(options){
this._element = null;
this.setXY = function(x,y){
if (x) this._element.style.left = x + px;
if (y) this._element.style.top = y + px;
};
this.getXY = function(){
return [parseInt(this._element.style.left),
parseInt(this._element.style.top)];
};
this.addItem = function(item){
this._element.appendChild(item._element);
E
您可能关注的文档
- ERKE十周年陈列指引方案[服装品牌鸿星尔克] (NXPowerLite).ppt
- EMASS 介绍 V2.0_移动版_20080707.ppt
- ERP库存模块操作知识 领料单出库操作步骤.doc
- ERP库存模块操作知识 查询核对“表一”中“加:领用物资”、“减:物资退库”来源的方法.doc
- ERP采购流程-ERP采购模块学习资料.pdf
- Energi Savr Node QS节能控制模块.pdf
- EWSD AMA话单格式.doc
- ESB在医疗领域的实际应用.pdf
- ESG Lab Report EMC最新NAS产品测试报告 英文版.pdf
- EWSD EWSD内置智能网业务的应用.doc
- 2024年中国农业银行山东淄博支行春季校招笔试题带答案.docx
- 2024年中国农业银行四川雅安支行春季校招笔试题带答案.docx
- 2024年中国农业银行江苏南通支行春季校招笔试题带答案.docx
- 2024年中国农业银行上海金山区支行春季校招笔试题带答案.docx
- 2024年中国农业银行四川遂宁支行春季校招笔试题带答案.docx
- 2024年中国农业银行江西南昌支行春季校招笔试题带答案.docx
- 2024年中国农业银行辽宁葫芦岛支行春季校招笔试题带答案.docx
- 2024年中国农业银行山东临沂支行春季校招笔试题带答案.docx
- 2024年中国农业银行上海闵行区支行春季校招笔试题带答案.docx
- 2024年中国农业银行江西萍乡支行春季校招笔试题带答案.docx
最近下载
- 2024年中级社工法规四色讲义-完整版全189页 .pdf VIP
- 17K408:散热器选用与管道安装.docx VIP
- 2025年湖北省武汉市高考物理四调试卷+答案解析(附后) .pdf VIP
- 合信 COTRUST科创思CTSC-200系列用户手册V1.40.pdf
- 2012湖南公务员考试-公共基础知识.doc VIP
- 二年级语文教师家长会专用.ppt
- 杭州名鑫双氧水有限公司每年10万吨(折27.5%)过氧化氢技术改造项目可行性研究报告.doc
- DB14Z 1-2025 高速公路智慧服务区建设指南.docx
- [城市轨道交通地下段列车运行引起的住宅室内振动与结构噪声限值及测量方法上海市.doc VIP
- SR变更管理程序+变更全套表单 OK.doc
文档评论(0)