`
247687009
  • 浏览: 174220 次
  • 性别: 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
分享到:
评论

相关推荐

    JavaScript5,JavaScript 5文档,JavaScript 5资料

    JavaScript5是Web开发中至关重要的一个版本,它奠定了现代JavaScript的基础。这个版本的JavaScript,也称为ECMAScript 5(ES5),在2009年发布,为开发者提供了更强大的工具和更丰富的功能,提升了JavaScript在网页...

    全站开发javascript

    函数是JavaScript中最重要的组成部分之一,包括定义、调用以及理解变量作用域。此外,高阶函数、map/reduce、filter和sort等方法为处理数组提供了便利,闭包能够帮助我们理解JavaScript中变量的作用域,而箭头函数则...

    JavaScript 调用wsdl示例

    JavaScript调用WSDL(Web Service Definition Language)是Web服务客户端编程的一个重要方面,尤其是在需要与SOAP(Simple Object Access Protocol)服务交互时。本示例主要介绍如何在JavaScript中使用不同的库和...

    Starbucks一个私有星巴克订购API的Javascript接口

    Starbucks提供的私有JavaScript接口是为开发者设计的,允许他们集成星巴克的订购系统到自己的应用程序中,从而提供更个性化的用户体验。这个API可能是基于RESTful架构,通过HTTP请求与服务器进行交互,通常采用JSON...

    Javascript 设计模式 很经典 第一本

    5. **适配器模式**:将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 6. **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。该...

    JavaScript设计模式之接口.doc

    JavaScript 设计模式中的接口是一种重要的概念,虽然JavaScript本身并不直接支持接口定义,但它可以通过模拟其他面向对象语言的接口实现方式来实现类似的功能。接口的主要作用是定义一组必须被实现的方法,确保不同...

    delphi google V8 脚本引擎接口 delphi程序 最佳 javascript 途径

    根据压缩包文件名称“v8delphiwrapper”,我们可以推测这是一个Delphi封装的V8引擎组件,它可能包含了必要的接口定义、类库和示例代码,使得Delphi开发者能够更方便地调用V8引擎,编写和执行JavaScript脚本。...

    Javascript中调用C++函数

    通过Emscripten编译器,可以将C++编译成WASM,然后通过WebIDL定义接口,使JavaScript可以调用C++函数。 总结,JavaScript调用C++函数涉及到语言间通信的复杂性,但通过ActiveX控件、NPAPI插件或现代的WebAssembly...

    android javascript扩展示例

    这个接口定义了可以在JavaScript中访问的Java方法。注意,为了安全原因,从Android 4.2 (API级别17)开始,只有标记为`@JavascriptInterface`的方法才能在WebView中被JavaScript调用。 3. **WebView设置**:在使用...

    面向对象JavaScript精要(英文原版pdf)

    类本质上是对构造函数和原型模式的一种语法糖,提供了更简洁的方式来定义类和子类。 #### 四、本书主要内容概述 本书全面覆盖了面向对象编程的基础理论,并结合JavaScript的具体实现进行讲解。 - **第一章:...

    Javascript 面向对象的JavaScript进阶

    **定义:** 封装性是面向对象编程的一个关键特性,它允许对象隐藏其内部状态和实现细节,只暴露必要的公共接口。这有助于保护对象的数据完整性,防止外部代码意外或恶意地修改这些数据。 **JavaScript中的实现:** ...

    JavaScript设计模式之接口.docx

    JavaScript设计模式中的接口是一种重要的编程概念,虽然JavaScript本身并不直接支持接口像Java或C#那样。接口在面向对象编程中起到了定义对象必须实现的方法集合的作用,促进了代码的可重用性和模块间的协作。通过...

    Learning JavaScript Design Patterns.pdf

    JavaScript设计模式是一系列被定义为软件设计中常见问题的可重用解决方案。设计模式既令人兴奋,也是探索编程的有趣话题,原因在于它们帮助我们借鉴了众多前辈开发者的经验,并确保我们的代码结构优化,以满足我们...

    javascript设计模式 接口介绍.docx

    JavaScript设计模式中的接口是软件开发中的一个重要概念,它在面向对象编程中起到规范和约定的作用。在强类型语言中,接口通常由语言本身提供支持,但在JavaScript这种动态类型的脚本语言中,没有内置的接口机制。...

    pro javascript design patterns

    在JavaScript中,可以通过创建一个新的类来“包装”原有的类,并提供一个符合新接口的方法。 ### 组合模式(Composite Pattern) 组合模式将对象组合成树形结构以表示部分整体的层次结构。在JavaScript中,这可以...

    《使用javascript访问kettle内部组件》示例代码

    而JavaScript作为一种广泛使用的脚本语言,能够与各种应用程序接口进行交互,包括Kettle的内部组件。 标题"《使用javascript访问kettle内部组件》示例代码"表明,我们将探讨如何使用JavaScript与Kettle进行交互,以...

    Javascript 设计模式 电子书

    4. 观察者模式:该模式用于定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。观察者模式在JavaScript事件处理中应用非常广泛。 5. 发布/订阅模式:这...

    JavaScript学习指南 源代码

    JavaScript的基础语法包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组、符号)、运算符(算术、比较、逻辑、赋值、三元运算符)、流程控制(条件语句if...else、...

    javascriptAPI

    JavaScript API 是一种基于Web浏览器的编程接口,它允许开发者通过JavaScript语言来操作和扩展浏览器的功能。JavaScript API 包含了众多用于网页动态交互、数据处理、用户界面控制等方面的函数和对象,是现代Web开发...

Global site tag (gtag.js) - Google Analytics