Javascript 面向对象(三)接口代码


Posted in Javascript onMay 23, 2012

程序中的接口:规定好有几个方法,方法名是什么。(因程序中要完成任务,都是通过函数或者说方法去实现的。)

javascript中的接口:把实例出来的某"类型对象"、和实例出来的"接口对象",进行一个比较,符合规则,就可以说:这个对象实现了规定的接口;

(接口类:通过这个类,来实例出不同的接口。即不同的接口实例,也就是不同的方法个数和方法名称)
(进行比较:其实质就是判断子类型实例出来的对象,是否有接口对象中所保存的方法名,还有个数。)
小实例:

电话类,下面可以有“坐机”,“手机”,"平板电脑电话"等等这些子类。而这些子类,都有一个共同的任务、功能或者说是目的---[拔通电话]

为了实现这个功能,不同的子类,可以有不同的内部实现方法,让这个电话能够拔通。但现在为用户考虑的话,必需做出一个规定:

不管你是什么子类型,你实例出来的对象,即有电话功能的对象,要实现[拔通电话],必须有二个方法,

即:1.按出电话号码(数字键)2.按拔号键;
下面是固定的设计模式:

var Interface = function(name,methods){ 
if(arguments.length != 2){ 
throw new Error("Interface constructor called with" + arguments.length + "arguments, but expected exactly 2."); 
} 
this.name = name; 
this.methods = []; 
for(var i = 0,len = methods.length; i <len; i++){ 
if(typeof methods[i] !== 'string'){ 
throw new Error("接口方法的名称必须是一个字符串"); 
} 
this.methods.push(methods[i]); 
} 
}; 
//Static class Method 
Interface.ensureImplements = function(myobject1,Iobject1){ 
if(arguments.length!=2){ 
throw new Error("方法 Interface.ensureImplemnents 指定了" + arguments.length+ "个参数,但是期望的是2个 ."); 
} 
for(var i=1,len = arguments.length; i<len; i++){ 
var _interface = arguments[i]; 
//接口对象,要通过接口类实例出来 
if(_interface.constructor !== Interface){ 
throw new Error("接口,不是通过Interface类,实例出来的"); 
} 
//把接口对象里面的方法名取出来,结合到本例中的手机对象,来验证,该手机对象是否有这两个方法,且方法名是不是一样; 
for(var j=0, methodsLen = _interface.methods.length; j<methodsLen;j++ ){ 
var method = _interface.methods[j]; 
if(!myobject1[method]||typeof myobject1[method] !== 'function'){ 
throw new Error("通过验证函数:Interface.ensureImplements: "+myobject1.name+"对象的方法"+ method + " 找不到或者不是一个Function"); 
} 
} 
} 
};

下面是例子
//通过接口类,实例出一个"拔通电话"的接口;现在这个接口对象testInterface,规定了二个方法,且方法名字是"callfun"和"callnum" 
var testInterface = new Interface("call",["callfun","callnum"]); 
//移动电话类,的构造函数; 
var mobilepone = function(call){ 
this.name = call; 
} 
//移动电话类的公有方法 
mobilepone.prototype = { 
"constructor":mobilepone, 
//必须和前面接口对象规定的方法名一样; 
"callfun" : function(){ 
document.write("按键"); 
}, 
//必须和前面接口对象规定的方法名一样 
"callnum" : function(){ 
document.write("拔号"); 
} 
} 
//通过移动电话类,实例一个三星的手机对象 
var anycall = new mobilepone("anycall"); 
//检测这个个三星的手机对象,是否实现了[拔通电话]这个接口;即把三星手机对象和接口对象做为参数传入验证函数,进行比较 
Interface.ensureImplements(anycall,testInterface); 
anycall.callnum();
Javascript 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
js取得url地址参数实例
Feb 22 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
全面解析Bootstrap弹窗的实现方法
Dec 01 Javascript
jQuery同步提交示例代码
Dec 12 Javascript
jQuery实现三级菜单的代码
May 09 Javascript
Iscrool下拉刷新功能实现方法(推荐)
Jun 26 Javascript
使用JavaScript中的lodash编写双色球效果
Jun 24 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
node.js实现简单的压缩/解压缩功能示例
Nov 05 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 Javascript
Javascript 面向对象(二)封装代码
May 23 #Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 #Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 #Javascript
基于jQuery的图片左右无缝滚动插件
May 23 #Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 #Javascript
jQuery 1.7.2中getAll方法的疑惑分析
May 23 #Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 #Javascript
You might like
php zend 相对路径问题
2009/01/12 PHP
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
js禁止表单重复提交
2017/08/29 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
jQuery实现日历效果
2020/09/11 jQuery
JavaScript实现简单动态表格
2020/12/02 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
美术指导助理求职信
2014/04/20 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
先进单位申报材料
2014/12/25 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
redis实现共同好友的思路详解
2021/05/26 Redis
vue实现列表垂直无缝滚动
2022/04/08 Vue.js