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 相关文章推荐
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
jQuery 遍历函数详解
Jul 05 Javascript
JavaScript学习笔记之创建对象
Mar 25 Javascript
微信小程序 登录的简单实现
Apr 19 Javascript
详解js几个绕不开的事件兼容写法
Aug 30 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
Apr 05 Javascript
深入浅析js原型链和vue构造函数
Oct 25 Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 Javascript
在Vue项目中使用Typescript的实现
Dec 19 Javascript
Echarts实现单条折线可拖拽效果
Dec 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
php cookie 登录验证示例代码
2009/03/16 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php 模拟POST提交的2种方法详解
2013/06/17 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
JS input 数字验证代码
2009/07/30 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
JS实现吸顶特效
2020/01/08 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
关于python的list相关知识(推荐)
2017/08/30 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
计算机应用毕业生自荐信
2013/10/23 职场文书
采购部部门职责
2013/12/15 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
餐厅总厨求职信
2014/03/04 职场文书
黄金酒广告词
2014/03/21 职场文书
关于运动会的广播稿
2014/09/22 职场文书
大学教师个人总结
2015/02/10 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
Java实现二分搜索树的示例代码
2022/03/17 Java/Android