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 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
屏蔽script注入小例子
Nov 12 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
浅谈document.write()输出样式
May 07 Javascript
js数组如何添加json数据及js数组与json的区别
Oct 27 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
js的OOP继承实现(必看篇)
Feb 18 Javascript
Vue中的作用域CSS和CSS模块的区别
Oct 09 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
angularjs自定义过滤器demo示例
Aug 24 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
插件导致ECharts被全量引入的坑示例解析
Sep 23 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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
javascript 有趣而诡异的数组
2009/04/06 Javascript
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
详解jQuery中的事件
2016/12/14 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
pandas带有重复索引操作方法
2018/06/08 Python
python调用webservice接口的实现
2019/07/12 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
丧事主持词大全
2014/04/02 职场文书
律师授权委托书范本
2014/10/07 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python