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中判断控件是否存在
Aug 25 Javascript
jQeury淡入淡出需要注意的问题
Sep 08 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
jquery原理以及学习技巧介绍
Nov 11 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
Javascript动画效果(3)
Oct 11 Javascript
vue时间格式化实例代码
Jun 13 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 Javascript
Django模板继承 extend标签实例代码详解
May 16 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
laravel安装和配置教程
2014/10/29 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
JavaScript 基础问答三
2008/12/03 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python使用pymysql小技巧
2017/06/04 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
python调用win32接口进行截图的示例
2020/11/11 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
领导调研接待方案
2014/02/27 职场文书
服务承诺口号
2014/05/22 职场文书
学校宣传标语
2014/06/18 职场文书
水电维修专业推荐信
2014/09/06 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
企业催款函范本
2015/06/24 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书