突发奇想的想起了javascript的oo,扩展到设计模式中,貌似没有接口,非常多的设计模式无法实现,比如组合,代理等...
于是就写了一份javascript接口实现的demo.代码如下.
/*
* @param {String} name 继承接口的类名.
* @param {Array} methods 类要实现的方法数组.
* 功能说明:构造类方法.
* 中间的所有参数,需要用反射来验证所有参数的正确性.否则就失去意义了.
*/
var Interface = function(className,methodsArray){
if(arguments.length!=2){
throw new Error("实现接口必须要满足2个以上的参数");
}
this.obj = className;
this.methods = [];//实现方法集合,这里定义成一个共有的方便访问.
for(var i=0;i<methodsArray.length;i++){
if(typeof methodsArray[i]!=='string'){
throw new Error("实现的方法名必须是字符");
}
this.methods.push(methodsArray[i]);//推入方法实现列表的
}
this.init();
}
Interface.prototype = {
//反射检测
init:function(){
if(this.obj){
for(var i=0;i<this.methods.length;i++){
var __tempMethodName__ = this.methods[i];
if(!this.obj[__tempMethodName__]){
throw new Error("方法未完全实现");
return false;
}
}
alert("方法全部被实现了");
}
else{
throw new Error("对象不存在");
}
}
}
测试demo.html
<script type="text/javascript" src="../js/coke.js"></script>
<script type="text/javascript">
window.onload = function(){
var ss = new Object();
ss.sayHellow = function(){
}
ss.run = function(){
}
var ints = new Interface(ss,['sayHellow','run']);
}
</script>
</head>
虽然实现了,可是还有一些不太理想的地方.
1.比如ss.sayHellow 就只能用 object() new 出来么?如果有人写
var ss = function(){};
ss.prototype.sayHellow = function(){
...
}
怎么办???
2.中间的反射检查是否过多过细?会不会有性能方面的问题???
留下这些问题,继续考虑,同时也希望各位大牛给我点意见来优化这个代码.
分享到:
相关推荐
这种方法提供了一种静态类型语言中接口检查的近似,但请注意,JavaScript是一种动态类型语言,这种实现并不完全等同于强类型的接口概念,它依赖于开发者的自律和代码审查来确保正确性。 总结: 在JavaScript中,...
基于安卓平台的JavaScript扩展对象实现方法及绑定接口结构
JavaScript 设计模式中的接口是一种重要的概念,虽然JavaScript本身并不直接支持接口定义,但它可以通过模拟其他面向对象语言的接口实现方式来实现类似的功能。接口的主要作用是定义一组必须被实现的方法,确保不同...
鸭子模型是动态类型语言中常见的接口实现方式。它基于行为而不是结构来判断一个对象是否符合某个接口。如果一个对象具有接口规定的所有方法和属性,并且行为一致,那么就认为它实现了该接口。在JavaScript中,这是最...
百度翻译API接口JavaScript版是百度提供的一项服务,允许开发者通过JavaScript编程语言在网页上实现便捷的翻译功能,为用户提供多语言之间的文本互译。在这款API中,百度结合了强大的自然语言处理技术,使得开发者...
在这个主题中,我们将深入探讨如何在Android中加载assets目录下的HTML文件,并通过WebView实现与JavaScript的交互。 首先,我们要了解`WebView`的基本用法。在Android布局文件中,我们添加一个WebView组件: ```...
3. 缺乏编译时检查:不像静态类型语言,JavaScript在编译时不会检查接口实现,需要开发者手动进行验证。 在实践中,为了平衡这些优缺点,开发者可以选择在开发阶段使用接口检查,而在生产环境中根据性能需求决定...
在JavaScript中,可以通过闭包来实现封装,就像示例中的`book`函数。在这个例子中,`COUNT`变量和`checkISBN`方法是私有的,只能在构造函数内部访问。`ctor`构造函数通过`this`关键字创建了公有方法,如`setId`、`...
本项目为基于JavaScript和TypeScript开发的母婴用品交易平台——yierbao_api的接口实现设计源码,总计包含1408个文件,其中包括649个JavaScript文件、243个Markdown文件、183个JSON文件、35个TypeScript文件、29个...
本示例主要介绍如何在JavaScript中使用不同的库和方法来实现这一功能。 首先,理解WSDL是关键。WSDL是一种XML格式的规范,用于描述Web服务以及如何访问这些服务。它定义了服务的位置、可用的操作以及如何通过SOAP...
标题中提到的“JavaScript接口的实现三种方式”,实际上在内容中介绍了四种方式:注释法、检查属性法、鸭式辨形法和接口类。下面我将详细阐述这些知识点。 1. 注释法:这是一种非正式的接口定义方式,它通过在代码...
标题中的“百度地图接口源码javascript”指的是使用JavaScript...通过深入学习和实践百度地图的JavaScript接口源码,开发者不仅可以创建各种地图应用,还可以结合自己的业务需求,扩展和优化地图功能,提高用户体验。
"js串口r232"指的是使用JavaScript实现的R232串行通信接口。R232是早期的串行通信标准,虽然现在已被其他标准取代,但仍然广泛存在于各种设备中,如PLC、工控机等。在JavaScript中模拟R232通信,通常需要借助第三方...
NPAPI插件也需要在C++中编写,并且必须实现特定的接口以供JavaScript调用。不过,NPAPI的使用已经大大减少,因此这里不再详细介绍。 **4. 更现代的方法:** 现代浏览器更倾向于使用WebAssembly(WASM)和WebIDL来...
这个过程通常涉及到Android的WebView组件和JavaScript接口的实现。以下是对这一主题的详细讲解。 一、WebView组件介绍 WebView是Android SDK提供的一种用于在应用内展示网页内容的控件。它不仅可以加载URL,还能...
在JavaScript中,基本的数据类型包括字符串、数字、布尔值、null、undefined、对象和Symbol。其中,字符串是不可变的字符序列,可以使用模板字面量来方便地创建和操作;数字包括整数和浮点数,可以用十进制、八进制...
4. **Delphi实现COM接口**:在Delphi中,你需要定义一个接口(如`IMyExternal`),并在Delphi的类中实现这个接口。接口定义了对外暴露的方法和属性。Delphi的项目设置需要配置为生成COM兼容的代码。 5. **注册COM...
但问题在于,在JavaScript的世界中,没有内置的创建或实现接口的方法,也没有可以判断一个对象是否实现了与另一个对象相同的一套方法,这使得对象之间很难互换使用,好在JavaScript拥有出色的灵活性,这使得模拟传统...
在这个场景中,我们有一个名为“接口测试工具V1.0.hta”的工具,它是一个使用JavaScript语言实现的轻量级HTTP接口测试小程序。该工具特别适用于Windows操作系统,用户只需双击即可启动使用。 JavaScript,通常简称...