我在参考Sandbox实现中遇到了这段代码(代码如下)。我认为这个实现是众所周知的,因为它是JQuery的一部分,也在我正在阅读的书中引用。
var Sandbox = function(){
var args = Array.prototype.slice.call(arguments);
var callback = args.pop();
var modules = (args[0] && typeof args[0] === 'string') ? args : args[0];
var i;
...
if(!modules || modules === '*'){
modules = [];
for(i in Sandbox.modules){
if(Sandbox.modules.hasOwnProperty(i)){
modules.push(i);
};
};
};
..
Sandbox()需要" *"作为它的第一个参数和一个回调作为它的第二个参数。问题是关于第一个论点。
即。如果我打电话
new Sandbox("*", function X() {});
' if'条件将失败
if(!modules || modules === '*') {
我的调查显示'类型的模块'是对象'在此行之后,当args [0]为任何字符串时。
var modules = (args[0] && typeof args[0] === 'string') ? args : args[0];
但Sandbox实现期望if条件为真。
所以,这里有什么问题......