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 相关文章推荐
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
js窗口关闭提示信息(兼容IE和firefox)
Oct 23 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
浅析JS原型继承与类的继承
Apr 07 Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
利用JS实现一个同Excel表现的智能填充算法
Aug 13 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
May 15 Javascript
Angular8基础应用之表单及其验证
Aug 11 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 Mysql日期和时间函数集合
2007/11/16 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
将string解析为json的几种方式小结
2010/11/11 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python中for循环控制语句用法实例
2015/06/02 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
关于VPN
2012/06/10 面试题
中学学校门卫岗位职责
2014/08/15 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
小学同学聚会感言
2015/07/30 职场文书
行为规范主题班会
2015/08/13 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
教师远程研修感悟
2015/11/18 职场文书