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 相关文章推荐
List the Stored Procedures in a SQL Server database
Jun 20 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
Apr 01 Javascript
JS获取并操作iframe中元素的方法
Mar 21 Javascript
Jquery实现textarea根据文本内容自适应高度
Apr 03 Javascript
JS验证邮件地址格式方法小结
Dec 01 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
AngularJS实现进度条功能示例
Jul 05 Javascript
JS+HTML5实现图片在线预览功能
Jul 22 Javascript
简单实现jQuery上传图片显示预览功能
Jun 29 jQuery
微信小程序报错:this.setData is not a function的解决办法
Sep 27 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
基于文本的访客签到簿
2006/10/09 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
php session的应用详细介绍
2017/03/22 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
javascript 节点排序 2
2011/01/31 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python实现的快速排序算法详解
2017/08/01 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
python实现字符串和数字拼接
2020/03/02 Python
python使用建议技巧分享(三)
2020/08/18 Python
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
会计专业大学生职业生涯规划书
2014/02/11 职场文书
工会经费申请报告
2015/05/15 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
小程序自定义轮播图圆点组件
2022/06/25 Javascript