主页 > 前端 > javascript >
来源:自学PHP网 时间:2024-01-22 11:25 作者: 阅读:次
[导读] 如何用面向对象的思想来写JavaScript,对于初学者应该是比较难的,我们经常用的JQuery其实也是用面向对象的思想去封装的,今天我们来看看如何在Javascript中用Interface,在C#还是JAVA中都应...
但是JavaScript中没有相应的机制,但是Javascript很灵活,我们可以用它的特性去模仿Interface,但是我们需要加入一些methods来做check的动作 我们还是可以使用程序来模拟JavaScript Interface接口的实现。一般来说,模拟Interface的实现有如下三种方法: 1.注释法——将接口的定义写在注释中,大家能否小心注意,以实现接口的所有方法全凭自觉 2.属性检查法——自己说明我实现了哪些接口,一会儿你检查的时候记得检查我说我实现的接口里面,是否把我真正想要实现的接口全部实现了(这么别扭呢),总之就是自欺欺人 3.鸭式辨型法——像鸭子一样,嘎嘎叫的那么就是鸭子。具有鸭子特性的东西,我们就可以称之为鸭子。能直立行走,会使用工具的除了机器人,都是人。嗯~~ 按照书中介绍的,我们也一样彩注释法与鸭式辨型相结合的方法,来模拟Js的接口实现。 代码如下 复制代码 // Constructor /* * @param name String 接口的名字 * @param methods Array 接口里面定义的方法 */ var Interface = function(name, methods){ //如果购造函数的参数不等于2个,那么抛出异常 if (arguments.length != 2) { throw new Error("Interface constructor called with " + arguments.length + "arguments,but expected exactyl 2.") } this.name = name; this.methods = []; //方法数组,保证传进来的methods数组中,每一个元素都是字符串类型 for (var i = 0, len = methods.length; i < len; i++) { if (typeof methods[i] !== "string") { throw new Error("Interface constructor expects methods names to bo " + "passed in asastring."); } this.methods.push(methods[i]); } } //Static class methods Interface.ensureImplements = function(object){ //如果参数少于2个,抛出异常,object是待判断实现接口的对象 if (arguments.length < 2) { throw new Error("Function Interface.ensureImplements called with " + arguments.length + "arguments,but expected at least 2."); } for (var i = 1, len = arguments.length; i < len; i++) { //inter_face为接口,一定要实现Interface类 //书中使用interface,因是JavaScript中保留字,所以暂替换为inter_face var inter_face = arguments[i]; if (inter_face.constructor !== Interface) { throw new Error("Function Interface.ensureImplementsexpects arguments " + "two and above to be instances of Interface."); } for (var j = 0, methodsLen = inter_face.methods.length; j < methodsLen; j++) { //对象中是否含有接口中定义的方法 var method = inter_face.methods[j]; if (!object[method] || typeof object[method] !== 'function') { throw new Error("Function Interface.ensureImplements: object " + "does not implements the " + inter_face.name + "interface.Method " + method + "was not found."); } } } } 可能大家比较晕,注释写在哪了?答,注释写在调用的页面上。例如: 代码如下 复制代码 //定义接口Composite,实现add,remove,getChild三种方法 var Composite = new Interface('Composite',['add','remove','getChild']); //定义接口FormItem,实现save方法 var FormItem = new Interface('FormItem',['save']); //判断对象是否实现了上述两个接口 var object = new Class(); Interface.ensureImplements(object,Composite,FormItem); 接口固然是好用,不过有的时候也要判断一下是否有必要用接口。这可是一项很难的工作啊。具体情况具体分析,决定权在你。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com