02_js中接口的定义和使用

js中接口的定义和使用

js中定义和使用接口有三种方式:

1. 通过注释来声明,这个属于文档规范的范畴,需要程序员严格遵守约定。

2. 通过属性声明和检查。使用很少。

3. 通过鸭式辨认来实现接口:某个类是否声明自己支持哪些接口并不重要,只要它具有接口中的这些方法就行。

本文演示的是第三种方法。

下面是Interface.js的实现:

/**

*  var Person=new Interface("person",["sayHello","eat"]);

* @param name

* @param methods  接口中定义的方法,数组形式

* @constructor

*/

function Interface(name, methods) {

if (arguments.length != 2) {

throw new Error("定义接口参数个数错误!");

}

this.name = name;

this.methods = [];

for (var i = 0; i < methods.length; i++) {

if (typeof methods[i] !== "string") {

throw new Error(this.name + "接口中方法定义有误!");

}

this.methods.push(methods[i]);

}

}

/**

*类的静态方法,用于确认某个类的实例是否实现的给定的接口。

* Interface.ensureImplements(student,["Person","Learner"]);

* @param object

* @param interfaces  接口数组

*/

Interface.ensureImplements = function (object, interfaces) {

if (arguments.length != 2) {

throw new Error("Interface.ensureImplements方法参数个数错误!");

}

if (!(object instanceof Object)) {

throw new Error("Interface.ensureImplements第一个参数必须为Object实例!");

}

if (Object.prototype.toString.call(interfaces) !== "[object Array]") {

throw new Error("Interface.ensureImplements第二个参数必须为接口数组!");

}

for (var i = 0; i < interfaces.length; i++) {

var interface = interfaces[i];

if (!(interface instanceof  Interface)) {

throw new Error("Interface.ensureImplements第二个参数中对象必须为Interface实例");

}

for (var j = 0; j < interface.methods.length; j++) {

var method = interface.methods[j];

if (!object[method] || typeof object[method] !== "function") {

throw new Error("接口中的" + method + "方法未被实现!");

}

}

}

}

下面是使用举例:

//定义接口以及接口中的方法

var Person = new Interface("Person", ["sayHello", "eat"]);

var Learner = new Interface("Learner", ["learn"]);

function Student(name) {

this.name = name;

}

Student.prototype.sayHello = function () {

alert("hello");

};

Student.prototype.eat = function () {

alert("eat");

}

Student.prototype.learn = function () {

alert("I am a learner");

}

function test(student) {

Interface.ensureImplements(student, [Person, Learner]);

/*

*确保了student实现了必须的接口之后,就可以放心的调用接口中定义的方法!!!

*/

student.sayHello();

student.eat();

student.learn();

}

var stu = new Student();

test(stu);  //调用方法

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 21:58:40

02_js中接口的定义和使用的相关文章

java中接口的定义与实现

1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的訪问权限,可选值为public.假设省略则使用默认的訪问权限. 接口名:必选參数,用于指定接口的名称,接口名

Java中接口里定义的成员变量

首先你要弄清接口的含义.接口就是提供一种统一的'协议',而接口中的属性也属于'协议'中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final 的.所以你可以这样写: public static final int i=10; 或则 int i=10;(可以省略掉一部分) 注意在声明的时候要给变量赋予初值 解释: 首先你要弄清接口的含义.接口就是提供一种统一的'协议',而接口中的属性也属于'协议'中的成员.它们是公共的,

java中接口的定义和接口的实现

1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的访问权限,可选值为public.如果省略则使用默认的访问权限. 接口名:必选参数,用于指定接口的名称,接口名必

java中接口中成员的定义

java中的接口的作用是提供编程框架,它作为统一的规范让其他类进行扩展,是java中非常优秀的设计. 这娃用以下代码总结了java中接口可以定义的成员以及它们默认被修饰的关键字: //外部接口的访问修饰符只能是public或默认修饰符 ,并且它的成员只能用public访问修饰符修饰, 接口不能用final修饰 public interface A { //成员变量,默认用public static final 修饰 String name="ahei"; //成员方法,默认用publi

Java中接口(Interface)的定义和使用

有关 Java 中接口的使用相信程序员们都知道,但是你们知不知道接口到底有什么用呢?毫无疑问,接口的重要性远比想象中重要.接下来我们便一起来学习Java中接口使用. Java接口是什么 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口(英语:Interface),在JAVA编程语言中是一个抽象类型(Abstract Type),它被用来要求类(Class)必须实现指

C#中接口和抽象类的区别

什么是接口? 用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有了这个协定,就可以抛开编程语言的限制(理论上).C#接口可以从多个基接口继承,而类或结构可以实现多个接口.C#接口可以包含方法.属性.事件和索引器.接口本身不提供它所定义的成员的实现.接口只指定实现该接口的类或接口必须提供的成员. 如何使用接口? 例如: <span style="font-family:KaiTi_GB2312;">using System; using System.Co

Java接口里定义成员变量 说明

首先你要弄清接口的含义.接口就是提供一种统一的'协议',而接口中的属性也属于'协议'中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final 的.所以你可以这样写: public static final int i=10; 或则 int i=10;(可以省略掉一部分,在接口里的成员变量默认就是public static final) 注意在声明的时候要给变量赋予初值 解释: 首先你要弄清接口的含义.接口就是提供一种统

java中接口的理解

以前我们常说java是一门"面向对象的编程",而现在我们更多说"面向对象编程".可见java语言中接口的地位是什么高的. 一.什么是接口?在软件中接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现,接口其实上也可以看做是一个特殊的抽象类,但是采用和抽象类完全不同的方法来表示,两者的设计理念也是不同的,抽象类有利于代码复用,接口利于代码的扩展和维护. 二.接口的作用:在Java语言中, abstract class 和interfac

Android中接口(Interface)的简单使用

  Android中接口(Interface)的简单使用 Java中的接口可以被看作是只包含常量和抽象方法的抽象类 . 可以使用如下方式定义一个接口: public interface InterfaceDemo { int i = 10; void method1(); int method2(); } 使用1: 解决“多重继承”的问题 Java语言本身是不支持类的多重继承(多重继承是指一个类从多个类继承而来,即一个类拥有多个超类)的,但一个类却可以实现多个接口.这样,我们可以将一些抽象方法定