Javascript之面向对象--接口


Posted in Javascript onDecember 02, 2016

接口:对实现某一种任务、功能,目的等,所规定的一些原则。

程序中的接口:规定好有几个方法,方法名是什么。(因程序中要完成任务,都是通过函数或者说方法去实现的。)

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之面向对象--封装》谢谢对三水点靠木的支持!

Javascript 相关文章推荐
JQuery困惑—包装集 DOM节点
Oct 16 Javascript
Jquery getJSON方法详细分析
Dec 26 Javascript
js键盘事件的keyCode
Jul 29 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
Mar 04 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
在ABP框架中使用BootstrapTable组件的方法
Jul 31 Javascript
Three.js利用性能插件stats实现性能监听的方法
Sep 25 Javascript
详解jQuery设置内容和属性
Apr 11 jQuery
解决vue初始化项目一直停在downloading template的问题
Nov 09 Javascript
Javascript之面向对象--封装
Dec 02 #Javascript
JavaScript制作弹出层效果
Dec 02 #Javascript
Javascript之面向对象--方法
Dec 02 #Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 #Javascript
Vue.js组件tree实现省市多级联动
Dec 02 #Javascript
Vue2实现组件props双向绑定
Dec 02 #Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 #Javascript
You might like
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
javascript 一些用法小结
2009/09/11 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
python开发之thread实现布朗运动的方法
2015/11/11 Python
python实现祝福弹窗效果
2019/04/07 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python matplotlib实时画图案例
2020/04/23 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
C#公司笔试题
2014/03/28 面试题
Linux开机引导的步骤是什么
2014/02/26 面试题
饮料业务员岗位职责
2013/12/15 职场文书
质量主管工作职责
2014/09/26 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
团结主题班会
2015/08/13 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
golang为什么要统一错误处理
2022/04/03 Golang