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 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
window.onload 加载完毕的问题及解决方案(上)
Jul 09 Javascript
JavaScript中计算网页中某个元素的位置
Jun 10 Javascript
jQuery打字效果实现方法(附demo源码下载)
Dec 18 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
Jul 18 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
jquery图片放大镜效果
Jun 23 jQuery
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
Mar 20 jQuery
详解在React里使用&quot;Vuex&quot;
Apr 02 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
PHP微信红包API接口
2015/12/05 PHP
php cookie 详解使用实例
2016/11/03 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
python如何查看系统网络流量的信息
2016/09/12 Python
深入理解python中的select模块
2017/04/23 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
大学生社会实践方案
2014/05/11 职场文书
业务员管理制度范本
2015/08/06 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
处理canvas绘制图片模糊问题
2022/05/11 Javascript