Closed yiidot closed 5 years ago
首先,GitHub 没有及时通知我(也有可能是被我漏掉了 😃 )耽误了很多天,表示抱歉。 另外代码检查没有通过,我 Review 了一下代码,发现有两个疑点:
eslint
报错(已修复✔️)addEvent
函数变成了一个闭包,会返回一个真正意义上的 “addEvent” 函数,这使得 API 规范发生了改变,需要商榷一下。
我认为把现在的 addEvent
变成一个工具函数,在用户加载 Jerry
时执行,然后返回的函数赋值给 addEvent
,这样的话就不会改变接口的规范了?不知道你怎么看?
我的代码大致如下:
const addEventHelper = function() {
if (!isInBrowser()) return function() {
throw new Error('请在浏览器中使用 addEvent 函数,Node 环境下请使用自定义事件 API。');
};
if (window.addEventListener) {
return function(el, eventType, callback) {
el.addEventListener(eventType, callback);
};
} else if (window.attachEvent) {
return function(el, eventType, callback) {
el.attachEvent('on' + eventType, callback);
};
} else {
return function(el, eventType, callback) {
el['on' + eventType] = callback;
};
}
};
const addEvent = addEventHelper();
@yiidot 感谢你的 PR!期待更多~
@zhongdeming428 我看了下代码,不好意思,是我写错了,我本想写个IIFE,只判断一次环境。 公司电脑文档加密,所以只能贴在这了。:relieved:
const addEvent = (function(window) {
if (!isInBrowser()) return function() {};
if (window.addEventListener) {
return function(el, eventType, callback) {
el.addEventListener(eventType, callback);
};
} else if (window.attachEvent) {
return function(el, eventType, callback) {
el.attachEvent('on' + eventType, callback);
};
} else {
return function(el, eventType, callback) {
el['on' + eventType] = callback;
};
}
})(window);
你的写法也是ok的,不过加载完Jerry后就可以销毁该Helper函数了。 @zhongdeming428
@yiidot 两种方案都不会销毁助手函数的啊,除非 addEvent 被销毁了~
另外我觉得非浏览器环境下返回的函数执行的时候时不时应该报个错提示一下?
@zhongdeming428 嗯,你的做法是对的。:thumbsup:
代码已合并, 感谢你的 PR~
多次添加监听事件无需重复判断环境。