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 API学Jquery 之三 筛选
Apr 09 Javascript
jquery 新浪网易的评论块制作
Jul 01 Javascript
javascript中的缓动效果实现程序
Dec 29 Javascript
简单实用的全选反选按钮例子
Oct 18 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
Oct 14 Javascript
jQuery侧边栏实现代码
May 06 Javascript
JS常用加密编码与算法实例总结
Dec 22 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
Feb 22 Javascript
react.js组件实现拖拽复制和可排序的示例代码
Aug 20 Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 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批量删除数据
2007/01/18 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP多文件上传类实例
2015/03/07 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
浅析javascript的return语句
2015/12/15 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python实现快速计算词频功能示例
2018/06/25 Python
python使用递归的方式建立二叉树
2019/07/03 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
《充气雨衣》教学反思
2014/04/07 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
申报材料格式
2014/12/30 职场文书
清明节随笔
2015/08/15 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
python本地文件服务器实例教程
2021/05/02 Python
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android
Windows server 2012搭建FTP服务器
2022/04/29 Servers