我正在使用运行时功能分配来解决浏览器差异。但是对于不支持的浏览器,我想返回一个空函数,以免抛出JavaScript错误。
但是,jslint抱怨空函数。什么是jslint快乐的方法呢?
空块。
$R.functionNull = function () {
// events not supported;
};
$R.Constructor.prototype.createEvent = (function () {
if (doc.createEvent) {
return function (type) {
var event = doc.createEvent("HTMLEvents");
event.initEvent(type, true, false);
$NS.eachKey(this, function (val) {
val.dispatchEvent(event);
});
};
}
if (doc.createEventObject) {
return function (type) {
var event = doc.createEventObject();
event.eventType = type;
$NS.eachKey(this, function (val) {
val.fireEvent('on' + type, event);
});
};
}
return $R.functionNull;
}());
答案 0 :(得分:10)
您可以为您的函数添加一个正文,并让它返回undefined
:
$R.functionNull = function() {
// Events not supported.
return undefined;
};
这保持了与“真正空”函数相同的语义,并且应该满足JSLint。
答案 1 :(得分:5)
对我来说这是最好的:
emptyFunction = Function();
console.log(emptyFunction); // logs 'ƒ anonymous() {}'
console.log(emptyFunction()); // logs 'undefined'
它太短了,我甚至不会将它分配给变量(当然你也可以使用类似常量的变量“EF”左右,这甚至更短,不需要附加的“()”括号)。只需在需要一个真正空函数的任何地方使用“Function()”,它甚至没有名称,即使将它分配给变量也是如此,这就是我的解决方案与Frédéric之间的小行为差异:
// --- Frédéric ---
emptyFunction = function() {
return undefined;
}
console.log(emptyFunction.name); // logs '"emptyFunction"'
// --- me ---
emptyFunction = Function();
console.log(emptyFunction.name); // logs '""' (or '"anonymous"' in chrome, to be fair)
答案 2 :(得分:1)
使用lambda表达式:
<div id="div_one">Hello</div>
<div id="div_two"></div>
答案 3 :(得分:0)
返回
return () => undefined;
代替
return $R.functionNull;