在 for 循环中返回函数调用的值
returning values of functioncalls in a for loop
我已经以一种非常通用的方式在JS中实现了观察者模式。现在我意识到有一个概念问题,我不知道如何解决它。你能给我一个提示如何解决它吗?(特别是以一种非常聪明的方式:-)这是代码:
var Oberserverable = function() {
var subscribers = { /* some delegated functions in here */ };
return {
attach: function (obj, fn) { subscribers[obj] = { src: obj, fn: fn }; },
detach: function (obj) { delete subscribers[obj]; },
notify: function (args) {
for(var o in subscribers) {
if(typeof args === "object") { args.target = subscribers[o].src; }
/* TODO return */ subscribers[o].fn.call(window, args);
}
},
count: function () { var size = 0; for(var o in subscribers) { size++; } return size; }
};
};
我希望每个委托函数都返回其值。但这会结束我想预先介绍的循环。
我使用它的示例案例;蹩脚的IE8事件处理的解决方法:
window.addEvent = function (obj, type, fn, bub) {
if(obj.addEventListener) {
return obj.addEventListener(type, fn, bub ? bub : false);
}
if(obj.attachEvent && type == "DOMContentLoaded") type = "load";
// no use of attachEvent() 'cause of very buggy behaviour in IE<=8
// http://stackoverflow.com/questions/15952943/ie-attachevent-call-returns-true-but-handler-shows-null
if(!obj["e"+type]) obj["e"+type] = new Oberserverable();
obj["e"+type].attach("e"+obj+fn, fn);
if(!obj["on"+type]) {
obj["on"+type] = function(e) {
e = e || window.event;
e.cancelBubble = bub;
return obj["e"+type].notify(e) || (type != "contextmenu"); // suppressing context menu in IE8 as default
};
}
}
尤里卡!
我想我已经找到了解决方案。实际问题不是可操作模式,而是示例案例本身。也许我应该做sth。喜欢这个:
obj["on"+type] = function(e) {
e = e || window.event;
e.cancelBubble = bub;
obj["e"+type].notify(e);
if(typeof e.preventDefault == "function") {
return e.preventDefault();
}
};
另一部分与此类似:
addEvent(document, "contextmenu", function(e) {
document.defaultAction = false;
if (e.preventDefault)
e.preventDefault();
else
e.preventDefault = function() { return false; };
if (e.stopPropagation)
e.stopPropagation();
if (e.returnValue)
e.returnValue = false;
});
它似乎以这种方式工作,但我不确定合规性和副作用。
相关文章:
- 如何记录调用另一个函数的函数的返回值
- 从JSP页面调用Java Script函数未返回值
- 我可以获得用Ajax调用的函数的返回代码吗
- 从函数返回函数而不调用返回的函数
- jQuery deferred:用于延迟函数的返回,直到函数内的异步调用完成+获取返回值
- PHP调用脚本函数,返回值为Uncaught SyntaxError:意外的令牌ILLEGAL
- node.js for循环在函数调用返回之前进行迭代,从而产生对象问题
- 如何使用一些变量参数从javascript函数调用 asp.net C#函数并从C#函数获取字符串返回
- ajax 调用返回时可以向页面添加新的 javascript 函数吗?
- 使用 ajax 调用返回嵌套函数的值时出现问题
- 从 Javascript 调用 PHP 函数并返回一个数组
- JavaScript - 使用具有 AJAX 调用的函数的返回参数
- .done() 函数在抓取本地 JSON 文件时未在 AJAX 调用返回的承诺上运行
- javascript函数调用返回未定义和页面连续加载
- 分配给变量的javascript函数调用返回未定义的结果
- 递归函数调用返回
- 从函数调用返回对象的函数输出未定义
- 为什么这个函数调用返回一个字符串而不是一个数字
- 从嵌套异步函数调用返回谓词
- 如何在函数内部分配函数调用返回的值[JS]