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 相关文章推荐
window.addeventjs事件驱动函数集合addEvent等
Feb 19 Javascript
jQuery事件绑定.on()简要概述及应用
Feb 07 Javascript
Node.js中的事件驱动编程详解
Aug 16 Javascript
JavaScript中的变量定义与储存介绍
Dec 31 Javascript
js制作网站首页图片轮播特效代码
Aug 30 Javascript
Bootstrap基本样式学习笔记之图片(6)
Dec 07 Javascript
JS Select下拉框(支持输入模糊查询)
Feb 04 Javascript
js中的 || 与 &amp;&amp; 运算符详解
May 24 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
Vue实现数据请求拦截
Oct 23 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 Javascript
微信小程序入门之指南针
Oct 22 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php网上商城购物车设计代码分享
2012/02/15 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
js实现内容显示并使用json传输数据
2016/03/16 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
基本DOM节点操作
2017/01/17 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
行政经理岗位职责
2013/11/09 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
中国世界遗产导游词
2015/02/13 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书