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 相关文章推荐
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
ExtJS的FieldSet的column列布局
Nov 20 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
Feb 03 Javascript
js函数在frame中的相互调用详解
Mar 03 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
layui使用form表单实现post请求页面跳转的方法
Sep 14 Javascript
如何实现小程序与小程序之间的跳转
Nov 04 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 表单验证实现代码
2009/03/10 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
Python中optparser库用法实例详解
2018/01/26 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
php优化查询foreach代码实例讲解
2021/03/24 PHP
节能减排倡议书
2014/04/15 职场文书
大学生实习证明范本
2014/09/19 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python