js发邮件接口(Javascript如何实现接口)

2026-04-25 11:30:02 :0

js发邮件接口(Javascript如何实现接口)

本篇文章给大家谈谈js发邮件接口,以及Javascript如何实现接口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

Javascript如何实现接口

在javascript中并没有原生的创建或者实现接口的方式,或者判定一个类型是否实现了某个接口,我们只能利用js的灵活性的特点,模拟接口。
在javascript中实现接口有三种方式:注释描述、属性验证、鸭子模型。
note:因为我看的是英文书,翻译水平有限,不知道有些词汇如何翻译,大家只能领会精神了。
1. 注释描述 (Describing Interfaces with Comments)
例子:
复制代码 代码如下:
/*
interface Composite {
  function add(child);
  function remove(child);
  function getChild(index);
}
interface FormItem {
  function save();
}
*/
var CompositeForm = function(id, method, action) { // implements Composite, FormItem
  ...
};
//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() {
...
};
模拟其他面向对象语言,使用interface 和 implements关键字,但是需要将他们注释起来,这样就不会有语法错误。
这样做的目的,只是为了告诉其他编程人员,这些类需要实现什么方法,需要在编程的时候加以注意。但是没有提供一种验证方式,这些类是否正确实现了这些接口中的方法,这种方式就是一种文档化的作法。
2. 属性验证(Emulating Interfaces with Attribute Checking)
例子:
复制代码 代码如下:
/* interface
Composite {
function add(child);
function remove(child);
function getChild(index);
}
interface FormItem {
function save();
}
*/
var CompositeForm = function(id, method, action) {
this.implementsInterfaces = ;
...
};
...
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 declares that it
// implements the required interfaces.
function implements(object) {
  for(var i = 1; i 《 arguments.length; i++) {
    // Looping through all arguments
    // after the first one.
    var interfaceName = arguments;
    var interfaceFound = false;
    for(var j = 0; j 《 object.implementsInterfaces.length; j++) {
      if(object.implementsInterfaces == interfaceName) {
        interfaceFound = true;
        break;
      }
    }
    if(!interfaceFound) {
      return false;
      // An interface was not found.
   }
  }
  return true;
// All interfaces were found.
}
这种方式比第一种方式有所改进,接口的定义仍然以注释的方式实现,但是添加了验证方法,判断一个类型是否实现了某个接口。
3.鸭子类型(Emulating Interfaces with Duck Typing)
复制代码 代码如下:
// Interfaces.
var Composite = new Interface(’Composite’, );
var FormItem = new Interface(’FormItem’, );
// CompositeForm class
var CompositeForm = function(id, method, action) {
  ...
};
...
function addForm(formInstance) {
  ensureImplements(formInstance, Composite, FormItem);
  // This function will throw an error if a required method is not implemented.
  ...
}
// Constructor.
var Interface = function(name, methods) {
  if(arguments.length != 2) {
    throw new Error("Interface constructor called with "
             + arguments.length + "arguments, but expected exactly 2.");
  }
  this.name = name;
  this.methods = ;
  for(var i = 0, len = methods.length; i 《 len; i++) {
    if(typeof methods !== ’string’) {
      throw new Error("Interface constructor expects method names to be "
              + "passed in as a string.");
    }
    this.methods.push(methods);
  }
};
// Static class method.
Interface.ensureImplements = function(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++) {
    var interface = arguments;
    if(interface.constructor !== Interface) {
      throw new Error("Function Interface.ensureImplements expects arguments"
              + "two and above to be instances of Interface.");
    }
    for(var j = 0, methodsLen = interface.methods.length; j 《 methodsLen; j++) {
      var method = interface.methods;
      if(!object !== ’function’) {
        throw new Error("Function Interface.ensureImplements: object "
                + "does not implement the " + interface.name + " interface. Method " + method + " was not found.");
      }
    }
  }
};
何时使用接口?
一直使用严格的类型验证并不适合,因为大多数javascript程序员已经在没有接口和接口验证的情况下编程多年。当你用设计模式开始设计一个很复杂的系统的时候,使用接口更有益处。看起来使用接口好像限制了javascript的灵活性,但实际上他让你的代码变得更加的松耦合。他使你的代码变得更加灵活,你可以传送任何类型的变量,并且保证他有你想要的方法。有很多场景接口非常适合使用。
在一个大型系统里,很多程序员一起参与开发项目,接口就变得非常必要了。程序员经常要访问一个还没有实现的api,或者为其他程序员提供别人依赖的一个方法存根,在这种情况下,接口变得相当的有价值。他们可以文档化api,并作为编程的契约。当存根被实现的api替换的时候你能立即知道,如果在开发过程中api有所变动,他能被另一个实现该接口的方法无缝替换。
如何使用接口?
首先要解决的问题是,在你的代码中是否适合使用接口。如果是小项目,使用接口会增加代码的复杂度。所以你要确定使用接口的情况下,是否是益处大于弊端。如果要使用接口,下面有几条建议:
***隐藏网址***
2.检查你的代码,确定哪些方法需要抽象到接口里面。
3.创建接口对象,没个接口对象里面包含一组相关的方法。
4.移除所有构造器验证,我们将使用第三种接口实现方式,也就是鸭子类型。
5.用Interface.ensureImplements替代构造器验证。
您可能感兴趣的文章:
小议javascript 设计模式 推荐
JavaScript 设计模式之组合模式解析
javascript 设计模式之单体模式 面向对象学习基础
JavaScript 设计模式 安全沙箱模式
JavaScript设计模式之观察者模式(发布者-订阅者模式)
JavaScript设计模式之原型模式(Object.create与prototype)介绍
JavaScript设计模式之工厂方法模式介绍
javascript设计模式之中介者模式Mediator
学习JavaScript设计模式之责任链模式

JS发送json格式POST请求有哪些方式

以Ajax方式发送
《script type="text/javascript"》
一、获取url所有参数值
function US() {
var name, value;
var str = location.href;
var num = str.indexOf("?");
str = str.substr(num + 1);
var arr = str.split("&");
for (var i = 0; i 《 arr.length; i++) {
num = arr.indexOf("=");
if (num 》 0) {
name = arr.substring(0, num);
value = arr.substr(num + 1);
this = value;
}
}
}
二、使用JS 发送JSON格式的POST请求
 var us = new US();
var xhr = new XMLHttpRequest();
xhr.open("POST", "/searchguard/api/v1/auth/login", true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.setRequestHeader("kbn-version", "5.3.0");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
window.location.href = us.nextUrl;
}
}
};
xhr.send(JSON.stringify({
"username" : us.u,
"password" : us.p
}));
《/script》

如果你还想了解更多这方面的信息,记得收藏关注本站。

js发邮件接口(Javascript如何实现接口)

本文编辑:admin

更多文章:


easyui调用bartendee模板(EXCEL数据库调用BarTender10.1问题)

easyui调用bartendee模板(EXCEL数据库调用BarTender10.1问题)

大家好,easyui调用bartendee模板相信很多的网友都不是很明白,包括EXCEL数据库调用BarTender10.1问题也是一样,不过没有关系,接下来就来为大家分享关于easyui调用bartendee模板和EXCEL数据库调用Ba

2026年7月18日 14:45

matlab sym(大家好!matlab中syms是什么意思)

matlab sym(大家好!matlab中syms是什么意思)

大家好,今天小编来为大家解答以下的问题,关于matlab sym,大家好!matlab中syms是什么意思这个很多人还不知道,现在让我们一起来看看吧!本文目录大家好!matlab中syms是什么意思matlab中syms什么意思MATLAB

2026年3月27日 04:15

technology各种词性(technique与technology的区别)

technology各种词性(technique与technology的区别)

“technology各种词性”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看technology各种词性(technique与technology的区别)!本文目录technique与technology的区别工艺的近义词

2026年3月28日 22:00

facilitate英语怎么读(促成的英语翻译 促成用英语怎么说)

facilitate英语怎么读(促成的英语翻译 促成用英语怎么说)

各位老铁们,大家好,今天由我来为大家分享facilitate英语怎么读,以及促成的英语翻译 促成用英语怎么说的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年2月28日 23:30

vue2diff算法(简单几句话,知道什么是回流重绘、vue虚拟dom、diff算法和key)

vue2diff算法(简单几句话,知道什么是回流重绘、vue虚拟dom、diff算法和key)

大家好,vue2diff算法相信很多的网友都不是很明白,包括简单几句话,知道什么是回流重绘、vue虚拟dom、diff算法和key也是一样,不过没有关系,接下来就来为大家分享关于vue2diff算法和简单几句话,知道什么是回流重绘、vue虚

2026年2月26日 10:15

金山表单移除填写入口什么意思(金山表单提交成功能删除吗)

金山表单移除填写入口什么意思(金山表单提交成功能删除吗)

各位老铁们好,相信很多人对金山表单移除填写入口什么意思都不是特别的了解,因此呢,今天就来为大家分享下关于金山表单移除填写入口什么意思以及金山表单提交成功能删除吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录金山

2025年9月16日 09:00

column在sql是什么意思(sql语句中的information_schema.COLUMNS 是什么意思呢)

column在sql是什么意思(sql语句中的information_schema.COLUMNS 是什么意思呢)

各位老铁们好,相信很多人对column在sql是什么意思都不是特别的了解,因此呢,今天就来为大家分享下关于column在sql是什么意思以及sql语句中的information_schema.COLUMNS 是什么意思呢的问题知识,还望可以

2026年8月17日 16:15

powerpoint模板(如何制作PowerPoint的模板)

powerpoint模板(如何制作PowerPoint的模板)

今天给各位分享如何制作PowerPoint的模板的知识,其中也会对如何制作PowerPoint的模板进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录如何制作PowerPoint的模板PPT演示文稿设计模板的默认

2025年7月6日 00:15

optimistic怎么读英语(optimistic怎么读)

optimistic怎么读英语(optimistic怎么读)

“optimistic怎么读英语”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看optimistic怎么读英语(optimistic怎么读)!本文目录optimistic怎么读optimistic 这个英语单词怎么读opti

2026年3月8日 11:45

snackbar怎么读英语(快餐店的英文单词是什么)

snackbar怎么读英语(快餐店的英文单词是什么)

“snackbar怎么读英语”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看snackbar怎么读英语(快餐店的英文单词是什么)!本文目录快餐店的英文单词是什么mobile怎么读主食用英文怎么说快餐店的英文单词是什么快餐店:

2026年3月14日 02:00

儿童编程课网课哪个好(少儿编程课应该选择哪家)

儿童编程课网课哪个好(少儿编程课应该选择哪家)

大家好,儿童编程课网课哪个好相信很多的网友都不是很明白,包括少儿编程课应该选择哪家也是一样,不过没有关系,接下来就来为大家分享关于儿童编程课网课哪个好和少儿编程课应该选择哪家的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧

2025年7月11日 01:30

html中生成滚动条或文字(html如何实现滚动文字和音乐)

html中生成滚动条或文字(html如何实现滚动文字和音乐)

大家好,html中生成滚动条或文字相信很多的网友都不是很明白,包括html如何实现滚动文字和音乐也是一样,不过没有关系,接下来就来为大家分享关于html中生成滚动条或文字和html如何实现滚动文字和音乐的一些知识点,大家可以关注收藏,免得下

2026年2月25日 20:45

js开发动态星星(使用Canvas绘制星星闪烁的效果)

js开发动态星星(使用Canvas绘制星星闪烁的效果)

本篇文章给大家谈谈js开发动态星星,以及使用Canvas绘制星星闪烁的效果对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录使用Canvas绘制星星闪烁的效果通过JS实现分数对应的星星评分体现QQ空间模块带星星的代码js星星评价

2026年3月27日 23:15

五一ppt网站(51文档如何下载)

五一ppt网站(51文档如何下载)

今天给各位分享51文档如何下载的知识,其中也会对51文档如何下载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录51文档如何下载五一劳动节活动策划书模板10篇51文档如何下载1登陆填写个人信息2来到主界面的话,

2026年3月26日 11:15

doughnut(甜甜圈用英语怎么说)

doughnut(甜甜圈用英语怎么说)

大家好,如果您还对doughnut不太了解,没有关系,今天就由本站为大家分享doughnut的知识,包括甜甜圈用英语怎么说的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录甜甜圈用英语怎么说doughnut是什么意思

2026年7月17日 22:15

conventionally a phoneme(conventionally是什么意思)

conventionally a phoneme(conventionally是什么意思)

大家好,关于conventionally a phoneme很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于conventionally是什么意思的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年2月16日 02:45

css下拉菜单颜色(如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明)

css下拉菜单颜色(如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明)

大家好,css下拉菜单颜色相信很多的网友都不是很明白,包括如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明也是一样,不过没有关系,接下来就来为大家分享关于css下拉菜单颜色和如何用CSS把下拉菜单背景色弄成透明而上面的文字不透明的一些

2025年6月3日 05:45

html5支持的标签(html5 新加的标签元素例如:<header><section><footer>解惑)

html5支持的标签(html5 新加的标签元素例如:<header><section><footer>解惑)

本篇文章给大家谈谈html5支持的标签,以及html5 新加的标签元素例如:解惑对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录html5 新加的标签元素例如:解惑html5中标签和标签有什么区别html5 新加的标签元素例如

2025年11月17日 20:30

dom4j生成xml特殊字符不转义(JAVA dom4j怎样将双引号 写入XML时为“ 表示)

dom4j生成xml特殊字符不转义(JAVA dom4j怎样将双引号 写入XML时为“ 表示)

大家好,关于dom4j生成xml特殊字符不转义很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于JAVA dom4j怎样将双引号 写入XML时为“ 表示的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,

2025年12月14日 22:45

headerstyles设表头样式(word怎么绘制表头斜线并打字)

headerstyles设表头样式(word怎么绘制表头斜线并打字)

大家好,如果您还对headerstyles设表头样式不太了解,没有关系,今天就由本站为大家分享headerstyles设表头样式的知识,包括word怎么绘制表头斜线并打字的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文

2026年8月7日 22:15

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索