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 中文字符串处理额外注意事项
Nov 15 Javascript
如何判断鼠标是否在DIV的区域内
Nov 13 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
详解Bootstrap插件
Apr 25 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
jquery.qtip提示信息插件用法简单实例
Jun 17 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
前端主流框架vue学习笔记第二篇
Jul 26 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
Webpack中loader打包各种文件的方法实例
Sep 03 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 代码规范小结
2012/03/08 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
php自动加载代码实例详解
2021/02/26 PHP
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
python求crc32值的方法
2014/10/05 Python
Django中使用group_by的方法
2015/05/26 Python
详谈python read readline readlines的区别
2017/09/22 Python
python opencv调用笔记本摄像头
2019/08/28 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
Django中modelform组件实例用法总结
2020/02/10 Python
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
公司员工手册范本
2015/05/14 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis