`
247687009
  • 浏览: 171949 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(一)javascript定义接口

阅读更多
什么是接口?
接口,也可以称为规范,即说明一个对象中应该具有哪些method,规范method应该返回怎样的类型以及结果,这些方法只是一个声明或者暗示它应该做什么事情,并不在意实现者的实现方式

接口的好处?
接口具有很强的自我描述性,告诉我们一个某个类实现了接口的类中一定具有该方法,便于我们的使用和快速的熟悉,从而实现更好的重用。


在java中中有关键字interface 来对接口进行说明和描述。
由于javascript是一门弱类型的语言,函数为一等公民,并没有专门来实现对接口的定义和描述。更不说自动检查一个对象是否实现个接口中的全部方法。但是我们通常更喜欢面向对象的方式来进行程序的设计。这样就只能通过我们自己来通过程序代码实现。

在java中的接口代码如下
public interface UserDao{
    void add(User u);
    void getAll();
}//在IDE中会自动对实现类完成检测

在javascript中由于并没有interface的关键字那就自己写实现吧
/*
	由于javascript是弱类型语言,并没有编译过程,类型检查只能通过
	程序员在运行时检测,该类是模拟java接口实现机制的接口类
*/

var Interface = function(InterfaceName,methods){
		if(arguments.length <2){
			throw new Error("接口中必须定义方法");
		};
		this.InterfaceName = InterfaceName;
		this.methods=[];
		for (var i = 0; i <methods.length; i++) {
				var method = methods[i];
				if(typeof method !== 'string'){
					throw new Error("传入的方法名数组必须是字符串");
				};
				this.methods.push(method);
		};
}
	/*
		检查一个类是否实现个某些接口中的方法静态方法
	*/
Interface.checkImpls = function(o){
		if(arguments.length <2){
			throw new Error("必须传入一个实现类,一个接口");
		};
		/*从1开始,检查传入的是否是接口对象,不是抛出异常,0是传入的具体对象*/
		var myInterface;
		for (var i = 1,len = arguments.length; i < len; i++) {
				myInterface	= arguments[i];
			if(myInterface.constructor !== Interface){ //传入的不是接口
				throw new Error("checkImpls方法中出入的第"+i+"个参数不是Inteface");
			};
			for(var j=0,mlen=myInterface.methods.length;j<mlen;j++){
					var method = myInterface.methods[j];
					if(!o[method] || typeof o[method] !== 'function'){
						throw new Error("对象没有实现接口:"+myInterface.InterfaceName+"中的方法:"+method);
				};
			};

		};
};

测试代码
  <html !document>
	<head>
		<table></table>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
		<script type="text/javascript" src="./Interface.js"></script>
		<script type="text/javascript">
				//javascript 接口测试
				var userDao = new Interface("userDao",["add","delete"]);

				var userDaoImpl = function(){};
                                   //这里我们完全实现了两个方法
				userDaoImpl.prototype.add = function(){};
				userDaoImpl.prototype.delete = function(){};
				Interface.checkImpls(new userDaoImpl(),userDao);

		</script>
	</head>
<body>
</body>
<html>

打开浏览器控制台如下图,可以看到是没有问题的

我们把add方法给注释起来
var userDao = new Interface("userDao",["add","delete"]);

				var userDaoImpl = function(){};
				//userDaoImpl.prototype.add = function(){};
				userDaoImpl.prototype.delete = function(){};
				Interface.checkImpls(new userDaoImpl(),userDao);

打开浏览器控制台


这样子是不是就完成了类似于接口的规范了呢,当然没有java接口的强大,不过足以够用了,
接下来是不是改分享继承了呢,呵呵!
  • 大小: 39.5 KB
  • 大小: 100.7 KB
分享到:
评论

相关推荐

    js属性检测接口.png

    Javascript 定义接口三种方式 第一种属性检测接口方式,

    JavaScript王者归来part.1 总数2

     9.4 字符串与文本处理--JavaScript棋谱阅读器(一)   9.4.1 需求分析--什么是棋谱和棋谱阅读器   9.4.2 系统设计--棋谱和棋盘数据的字符串描述   9.4.3 系统实现--解析和处理棋谱   9.4.4 完整的棋谱阅读...

    JavaScript学习心得之概述

    一、JavaScript是一种专为与网页交互而设计的脚本语言,它的的组成 ECMAScript(核心) DOM(文档对象模型) BOM(浏览器对象模型) 1.1ECMAScript  ECMA-262定义的ECMAScrip与Web浏览器没有依赖关系,ECMA-262...

    在JavaScript中调用Java类和接口的方法

    这些例子可作为脚本文件也可以在交互式 Shell 中一次运行一个语句的方式来运行。在 JavaScript 中访问对象的属性和方法的语法与 Java 语言相同。 本文包含如下几部分: 1、访问 Java 类 为了在 JavaScript 中访问...

    JavaScript接口实现代码 (Interfaces In JavaScript)

    在实际中,我们可以在注释中定义好接口,在实际的代码中予以实现 比如: 代码如下: /* interface Composite { function add(child); function remove(child); function getChild(index); } interface FormItem { ...

    javascript权威指南(第6版)

    《JavaScript权威指南(影印版)(第6版)(套装共2册)》是一本针对JavaScript语言的核心内容以及由浏览器定义的客户端JavaScript应用程序编程接口的程序员指南和综合参考书。第6版涵盖了HTML5和ECMAScript5。为了介绍...

    微信js接口typescript定义

    微信javascript接口, typescript定义,复制到项目内既可

    yapi-to-typescript:根据 YApi 或 Swagger 的接口定义生成 TypeScript 或 JavaScript 的接口类型及其请求函数代码

    YApi to TypeScript YApi to TypeScript(简称 ytt) 是一个代码生成工具,其可根据 或 的接口定义生成 TypeScript 或 JavaScript 的接口类型及其请求函数代码。 文档 官方文档: 国内镜像: 许可 :copyright:

    JavaScript接口实现方法实例分析

    本文实例讲述了JavaScript接口实现方法。...1,用注释定义一个接口 /* * interface PersonDao(){ * function add(obj); * function remove(obj); * function find(id); * } * */ (2)用注释来注明实现的接口

    javascript 设计模式

    javascript 设计模式 js继承,类创建,接口定义等设计方法详解

    JavaScript解决Joseph问题

    首先,作者定义了一个名为`printArray`的函数,该函数用于输出数组中的元素。在JavaScript中,数组对象有很多强大的方法,可以用很简短的代码实现强大的数组操作。 其次,作者使用了一个名为`a`的数组对象,并将其...

    JavaScript函数-深入解析与使用指南(很详细)

    JavaScript函数是一段可重复使用的代码块,用于执行特定的任务。它接受输入(参数),执行一系列操作,并可能返回输出(返回值)。函数在JavaScript中扮演着至关重要的角色,它使得代码更加模块化、可维护,并提高了...

    ios-DOClever开源免费API接口管理.rar

    DOClever是一个可视化接口管理工具 ,可以分析接口结构,校验接口正确性, 围绕接口定义文档,通过一系列自动化工具提升我们的协作效率。DOClever前后端全部采用了javascript来作为我们的开发语言,前端用的是vue ...

    JavaScript权威指南(第6版)(中文版)

    《JavaScript权威指南(第6版)(中文版)》是一本针对JavaScript语言的核心内容以及由浏览器定义的客户端JavaScript应用程序编程接口的程序员指南和综合参考书。《JavaScript权威指南(第6版)(中文版)》推荐给那些想学习...

    对javascript的一点点认识总结《javascript高级程序设计》读书笔记

    l ECMAScript,有ECMA-262定义,明确javascript这门语言的规则和约定,好比为开始一场游戏指定的游戏规则、规范、约定。 l DOM:提供访问和操作网页内容的方法和接口 l BOM,提供与浏览器交互的方法和接口 ECMA-262规定...

    Superstruct 一个简单和可组合的方式来验证Javascript中的数据-javascript

    • 原则 • 示例 • 文档 Superstruct 可以轻松定义接口,然后针对它们验证 Javascript 数据。 它的类型注释 API 的灵感来自 Typescript、Flow、Go 和 GraphQL,使其具有熟悉且易于理解的 API。 但是 Superstruct ...

    sdl_javascript_suite:SmartDeviceLink库,用于使用JavaScript开发的应用程序

    拟议的解决方案解决方案是创建一个公共JavaScript库,该库提供一个公共代理对象来发送和接收RPC。 该库还要求打包和构造数据并通过定义的传输发送数据所需的所有其他层的实现。SDL库层研究用Java和Objective-C开发的...

    JQuery EasyUi之界面设计——通用的JavaScript

    easyui是一个基于jquery的集成了各种用户界面的插件。 使用easyui你不需要写太多javascript代码,一般情况下你只需要使用一些html标记来定义用户接口。 easyui非常简单,但是功能非常强大。

    一款免费开源的接口管理平台DOClever,集接口自动化测试、接口文档、团队协作等功能

    DOClever是一个可视化接口管理工具 ,可以分析接口结构,校验接口正确性, 围绕接口定义文档,通过一系列自动化工具提升我们的协作效率。DOClever前后端全部采用了javascript来作为我们的开发语言,前端用的是vue+...

    Android与JavaScript交互的例子 附源码.rar

    这是一个演示Android与JavaScript交互的例子 附源代码,演示Android如何支持Js,添加接口对象 invokeTa 可以随便定义,Android与Js交互的类似标识Id的东西,加载Js。演示了Android调用Js 无参数和Android调用Js 传入...

Global site tag (gtag.js) - Google Analytics