js面向对象编程,定义接口
2014-03-12 15:17
274 查看
两个关于接口的工具函数
具体使用
var Composite = new Interface('Composite', ['add', 'remove', 'getChild']);
//定义了一个接口Composite,有三个方法add, remove, getChild
function addForm(formInstance) {
Interface.ensureImplements(formInstance, Composite);
// 检测formInstance实现了接口Composite,否则就会抛出错误
...
}
// 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[i] !== 'string') { throw new Error("Interface constructor expects method names to be " + "passed in as a string."); } this.methods.push(methods[i]); } }; // 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[i]; 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[j]; if(!object[method] || typeof object[method] !== 'function') { throw new Error("Function Interface.ensureImplements: object " + "does not implement the " + interface.name + " interface. Method " + method + " was not found."); } } } };
具体使用
var Composite = new Interface('Composite', ['add', 'remove', 'getChild']);
//定义了一个接口Composite,有三个方法add, remove, getChild
function addForm(formInstance) {
Interface.ensureImplements(formInstance, Composite);
// 检测formInstance实现了接口Composite,否则就会抛出错误
...
}
相关文章推荐
- Customize SharePoint Ribbon Using ECMA Javascript
- c#版json数据解析示例分享
- JS 软键盘
- JSP九大内置对象的作用和用法总结
- JS~json日期格式化
- javascript第六课类型转换
- EXTJS动态树,非常完整的一个例子
- JavaScript中两个感叹号(!!)的作用
- js面向对象编程,定义类的四种方法
- JSP页面中获得上下文路径
- js 当有滚动条加载是自动跳转到 某个元素
- js 用 hasOwnProperty() 判定属性是来自该对象成员,还是原型链
- js实现table排序-sortable.js
- javascript删除JSON元素
- table表头标题th浮动提示-MyTable.js
- 扩展js对象数组的OrderByAsc和OrderByDesc方法
- javascript原生态的同步异步请求实现
- javascript第五课表达式
- JS通用方法扩展
- js数组去重