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+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 Javascript
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
JS操作图片(增,删,改) 例子
Apr 17 Javascript
js修改input的type属性问题探讨
Oct 12 Javascript
JavaScript实现快速排序的方法
Jul 31 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
jQuery实现背景滑动菜单
Dec 02 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
js中arguments对象的深入理解
May 14 Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 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分页思路以及在ZF中的使用
2012/05/30 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
详解vue路由
2020/08/05 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
python链接Oracle数据库的方法
2015/06/28 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python:slice与indices的用法
2019/11/25 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Python for i in range ()用法详解
2020/09/18 Python
pymysql模块的操作实例
2019/12/17 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
大专毕业生简历的自我评价
2013/10/20 职场文书
年度考核评语
2014/01/19 职场文书
关于安全的标语
2014/06/10 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python