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 相关文章推荐
JavaScript 在线压缩和格式化收藏
Jan 16 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
May 15 Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
Oct 18 Javascript
JS获取当前日期和时间的简单实例
Nov 19 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
Angular2学习笔记之数据绑定的示例代码
Jan 03 Javascript
详解50行代码,Node爬虫练手项目
Apr 22 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 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编程网上资源导航
2006/10/09 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
return false;和e.preventDefault();的区别
2010/07/11 Javascript
了解一点js的Eval函数
2012/07/26 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
js实现抽奖功能
2020/11/24 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
django实现用户注册实例讲解
2019/10/30 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
Python发送邮件实现基础解析
2020/08/14 Python
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
综合办公室主任职责
2013/12/16 职场文书
趣味运动会活动方案
2014/02/12 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
辩论赛新闻稿
2015/07/17 职场文书
公司保密管理制度
2015/08/04 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL