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 相关文章推荐
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
Nov 24 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
jQuery实现文章图片弹出放大效果
Apr 06 jQuery
ES6正则表达式的一些新功能总结
May 09 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
基于vue通用表单解决方案的思考与分析
Mar 16 Javascript
Node.js事件的正确使用方法
Apr 05 Javascript
教你完全理解ReentrantLock重入锁
Jun 03 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
Aug 12 Javascript
在VUE中实现文件下载并判断状态的方法
Nov 08 Javascript
vue设置全局访问接口API地址操作
Aug 14 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
YII动态模型(动态表名)支持分析
2016/03/29 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
javascript实现手动点赞效果
2019/04/09 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
python中文乱码的解决方法
2013/11/04 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
会计自我鉴定
2014/02/04 职场文书
犯错检讨书
2014/02/21 职场文书
学生会主席演讲稿
2014/04/25 职场文书
环保宣传标语
2014/06/12 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
二婚主持词
2015/06/30 职场文书