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 相关文章推荐
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
js为空或不是对象问题的快速解决方法
Dec 11 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 Javascript
javascript元素动态创建实现方法
May 13 Javascript
javascript显示中文日期的方法
Jun 18 Javascript
javascript表单验证大全
Aug 12 Javascript
js制作网站首页图片轮播特效代码
Aug 30 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
关于HTML5的data-*自定义属性的总结
May 05 Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 Javascript
VUE脚手架具体使用方法
May 20 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python 操作文件的基本方法总结
2017/08/10 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
Python 中的lambda函数介绍
2018/10/10 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
小学语文国培感言
2014/03/04 职场文书
检讨书怎么写?
2019/06/21 职场文书
Go 语言结构实例分析
2021/07/04 Golang
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript