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 相关文章推荐
使用IE的地址栏来辅助调试Web页脚本
Mar 08 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
Feb 24 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 jQuery
微信小程序支付功能 php后台对接完整代码分享
Jun 12 Javascript
vue-cli3搭建项目的详细步骤
Dec 05 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
移动端手指操控左右滑动的菜单
Sep 08 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
[原创]图片分页查看
2006/08/28 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
python简单获取数组元素个数的方法
2015/07/13 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
python读取图片任意范围区域
2019/01/23 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
团员个人的自我评价
2013/12/02 职场文书
医学类个人求职信范文
2014/02/05 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
二年级学生期末评语
2014/12/26 职场文书
奖学金感谢信
2015/01/21 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript