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 相关文章推荐
又一个小巧的图片预加载类
May 05 Javascript
javascript数组组合成字符串的脚本
Jan 06 Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 Javascript
JS中 用户登录系统的解决办法
Apr 15 Javascript
jquery JSON的解析方式示例介绍
Jul 27 Javascript
原生JavaScript生成GUID的实现示例
Sep 05 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
JavaScript中神奇的call()方法
Mar 12 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
浅析JS中什么是自定义react数据验证组件
Oct 19 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
1.PHP简介
2006/10/09 PHP
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
smarty实现多级分类的方法
2014/12/05 PHP
js生成的验证码的实现与技术分析
2014/09/17 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
python 计算文件的md5值实例
2017/01/13 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python tornado修改log输出方式
2019/11/18 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
基于python plotly交互式图表大全
2019/12/07 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
Ajax的工作原理
2015/12/04 面试题
党支部书记先进事迹
2014/01/17 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
民事授权委托书范文
2014/08/02 职场文书
人事局接收函
2015/01/30 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫