扫码关注官方订阅号
无标题文档
欢迎选择我的课程,让我们一起见证您的进步~~
给你稍稍改了下,减了一层循环,不过没有测试,你先看看
interface.checkImplement = function(object) { // if (arguments.length < 2 || object.constructor !== Array) { if (arguments.length < 2 || !Array.isArray(object)) { throw "您并没有给指定的2个属性参数赋值,因此并不做接口规范检查"; } interface.objects = object; // var allInterfaceMethods = [].splice.call(arguments, 1).reduce(function(r, c) { // return r.concat(c.method); // }, []); var allInterfaceMethods = []; for (var i = 1; i < arguments.length; i++) { // 连接数组,生成大数组 allInterfaceMethods = allInterfaceMethods.concat(arguments[i].method); } // 这里可以给 allInterfaceMethods 去重,不去重也不影响后面的逻辑 // interface.objects.forEach(function(obj) { // allInterfaceMethods.forEach(function(method) { // if (typeof obj[method] !== "function") { // throw new Error("object类没有实现接口 抽象方法,或者值不是一个function"); // } // }); // }); for (var i = 0; i < interface.objects.length; i++) { var interobj = interface.objects[i]; // 上面那个忘了判断类型,这里加上 if (interobj.constrcutor !== interface) { throw new Error("这个接口对象属性值必须是object并且constroctur必须是接口 类"); } for (var j = 0; j < allInterfaceMethods.length; i++) { var method = allInterfaceMethods[j]; if (typeof interobj[method] !== "function") { throw new Error("object类没有实现接口 抽象方法,或者值不是一个function"); } } } };
总的来说,就是先把所的接口的方法都找出来,放在一个大数组里,去重(不去重也无所谓)。然后再遍历每个对象看是否实现了这些方法,就这里减少了一层 for。
for
判断类型的时候不需要先判是否存在,直接用 typeof 就可以了,因为对不存在的属性进行 typeof 去处会得到 "undefined",肯定不是 "function"。
typeof
"undefined"
"function"
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
给你稍稍改了下,减了一层循环,不过没有测试,你先看看
总的来说,就是先把所的接口的方法都找出来,放在一个大数组里,去重(不去重也无所谓)。然后再遍历每个对象看是否实现了这些方法,就这里减少了一层
for。判断类型的时候不需要先判是否存在,直接用
typeof就可以了,因为对不存在的属性进行typeof去处会得到"undefined",肯定不是"function"。