在JavaScript中模仿接口——本文摘自《JavaScript设计模式》
一、用注释描述接口
/*
interface Composite {
function add(child);
function remove(child);
function getChild(index);
}
interface FormItem {
function save();
}
*/
var CompositeForm = function(id, method, action){
//......
};
//Implement the Composite interface.
CompositeForm.prototype.add = function(child){
//......
}
CompositeForm.prototype.remove = function(child){
//......
}
CompositeForm.prototype.getChild = function(index){
//......
}
///Implement the FormItem interface.
CompositeForm.prototype.save = function(){
//......
}
这种模仿并不是很好,他们有为确保CompositeForm真正实现正确的方法集而进行检查,
也不会跑出错误以高质程序员程序中的问题。
二、用属性检查模仿接口
/*
interface Composite {
function add(child);
function remove(child);
function getChild(index);
}
interface FormItem {
function save();
}
*/
var CompositeForm = function(id, method, action){
this.implementsInterfaces = ['Composite', 'FormItem'];
//......
}
function addForm(formInstance){
if(!implements(formInstance, 'Composite', 'FormItem')){
throw new Error("Object does not implement a required interface");
}
//......
}
//The implements function, which checks to see if an object delcares that it
//implements the required interfaces.
function implements(object){
for(var i = 0; i < arguments.length; i++){
var interfaceName = arguments[i];
var interfaceFound = false;
for(var j = 0; j < object.implementsInterface.length; j++){
if(object.implementsInterface[j] == interfaceName){
interfaceFound = true;
break;
}
}
if(!interfaceFound){
return false; //An interface was not found.
}
}
return true; //All interface were found.
}
在这个例子中,CompositeForm宣传自己实现了Composite和FormItem这两个接口,其做法是吧这链各个接口的
名称加入一个名为implement上Interfaces的数组。
三、用鸭式辨型模仿接口
//Interfaces
var composite = new Interface('Composite', ['add', 'remove', 'getChild']);
var FormItem = new Interface('FormItem', ['save']);
//CompositeForm class
var CompositeForm = function(id, method, action){
//........
}
function addForm(formInstancd){
ensureImplements(formInstance, Composite, FormItem);
//........
}
待续……
分享到:
相关推荐
在本项目中,我们主要探讨的是如何使用JavaScript来创建一个模仿百度搜索引擎的预览效果的网页。这个项目的核心是利用JavaScript动态操作DOM元素,实现用户输入关键词后展示类似百度搜索结果的界面。以下是对这个...
在本主题中,我们关注的是"javascript 经典tab控件",这是一种常见的网页组件,用于组织和展示多块内容,让用户能够通过点击不同的标签来切换显示的内容。这种控件在许多网站和应用程序中都有应用,如设置页面、产品...
Javascript模仿接口可以有三种方式:1.注释法 2.检查属性法 3.鸭式辨形法 1.注释法:此方法属于程序文档范畴,对接口的继承实现完全依靠程序员自觉 /* interface People{ function createHead(); function ...
- **预请求脚本与测试脚本**:在发送请求前或请求后,可以编写JavaScript脚本来执行自定义逻辑,例如设置请求头或验证响应结果。 - **响应查看**:查看并解析HTTP响应,包括状态码、响应头和响应体。 - **历史...
在IT行业中,JavaScript和XML是两种非常重要的技术,它们在网页开发、数据交换以及动态效果实现等方面发挥着关键作用。本实例将详细讲解如何利用这两种技术来模仿迅雷广告的效果。 首先,JavaScript是一种广泛用于...
在本压缩包“myjs”中,你将找到一系列JavaScript实现的实例,这些实例涵盖了JavaScript的基本概念到高级应用。 首先,JavaScript的核心概念包括变量、数据类型(如字符串、数字、布尔值、对象等)、控制流程(如...
Javel的核心目标是提供一种简单而可定制的方式来处理JavaScript中的数据模型,模仿Laravel的Eloquent ORM(对象关系映射)。Eloquent ORM使得数据库操作变得简单,而Javel则试图为JavaScript对象提供类似的功能,...
JavaScript Event Bus 是一种设计模式,它在JavaScript编程中用于实现组件间的通信,特别是在单页应用程序(SPA)中。Event Bus 模式模仿了传统的事件总线概念,常见于桌面应用和服务器端框架,使得不同部分的代码...
在这个名为“人工智能-项目实践-搜索引擎-模仿百度首页开发的纯静态页面”的项目中,开发者旨在构建一个类似于百度首页的静态网页,但不依赖于jQuery插件,而是利用JavaScript和其他相关技术来实现功能。这个项目...
面向对象的JavaScript是一种编程范式,它允许开发者将数据和操作数据的方法封装在一起。这种方式可以提高代码的复用性和维护性。 - **语言特性**:这部分介绍了JavaScript的一些核心概念,包括引用、函数重载和类型...
Vue.js 是一个轻量级的前端JavaScript框架,以其易用性、灵活性和高效性而闻名。QQ音乐是一款深受用户喜爱的在线音乐应用,其界面设计和功能实现是许多开发者学习和模仿的对象。在这个项目中,我们将使用Vue.js来...
本资源"javascript经典特效---jQuery仿动感flash自动滚动图片切换广告插件.rar"是一个基于jQuery实现的图片轮播插件,它模仿了早期Flash技术中的动态滚动效果,但在不依赖Flash的情况下提供了类似的用户体验。...
【描述】"一个基于Web的QQ模仿"意味着该项目的目标是复刻QQ的核心功能,如登录、聊天、添加好友、群组聊天等,让用户在浏览器环境中就能享受这些服务。通常,这样的项目会涉及HTML、CSS和JavaScript的综合运用,可能...
当用户在搜索框中输入字符时,JavaScript代码会捕获到这个事件,并触发一个函数。这个函数通常会对当前输入的文本进行处理,例如去除空格、大小写转换等,然后将处理后的文本作为参数发送到服务器,请求相关的联想...
在"中国地图"这个例子中,可能包含一个展示中国地图的示例代码,通过加载地图接口,设置初始中心点,添加缩放和拖动功能,以及可能的一些标注和路线规划功能。开发者可以参考这个示例,结合自身需求,自定义地图应用...
在IT行业中,模仿大型电商平台如京东商城的商品分类代码是一个常见的学习和实践过程。这有助于开发者理解和掌握电商系统中商品分类的实现方式,并将其应用于自定义项目。以下将详细阐述这个主题,包括相关知识点和...
JavaScript 仿 Dreamweaver 颜色选择器是一种在网页中实现的颜色选取工具,它旨在模仿知名网页编辑软件Dreamweaver中的颜色选择功能。通过使用纯JavaScript编写,这个选择器可以方便地集成到任何HTML页面中,同时...
这可能涉及到暴露一些CSS变量供用户在浏览器控制台或外部CSS文件中调整,或者提供一个配置接口,允许用户输入颜色、字体等样式参数,然后在JavaScript代码中动态修改元素的样式属性。 5. **第215版**:这个版本号...