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 相关文章推荐
关于Javascript 的 prototype问题。
Jan 03 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
js数组方法扩展实现数组统计函数
Apr 09 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
js图片切换具体实现代码
Oct 13 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 Javascript
jquery动态添加带有样式的HTML标签元素方法
Feb 24 jQuery
Vue Router的懒加载路径的解决方法
Jun 21 Javascript
Vue实现table上下移动功能示例
Feb 21 Javascript
Vue 数据绑定的原理分析
Nov 16 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读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php中__toString()方法用法示例
2016/12/07 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
js常用排序实现代码
2010/12/28 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
python使用arp欺骗伪造网关的方法
2015/04/24 Python
python实现Decorator模式实例代码
2018/02/09 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python如何运行js语句
2020/09/09 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
文明青少年标兵事迹材料
2014/01/28 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
会议简报格式范文
2015/07/20 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Redis中一个String类型引发的惨案
2021/07/25 Redis