有没有办法检测调用构造函数是否会导致TypeError而不诉诸try-catch
?
我正在努力避免try-catch
,因为它会有巨大的性能影响。
上下文:我正在构建一个clone()函数。例如,在jQuery中,忽略了对象的构造函数,导致:
function Panda(){}
var p1 = new Panda(),
p2;
p2 = jQuery.extend(true, {}, (p1)); // cloning
// > Object {}
p2 instanceof Panda;
// > false
在某些时候,我想在我的clone()函数中使用这个语句,这样我就可以借用构造函数来创建一个新实例:
function clone(obj) {
...
var doppelgangerObj = new obj.constructor();
...
}
p2 = clone(p1);
p2 instanceof Panda;
// > true
我已经过滤掉了Arrays和Array-Like对象(NodeLists
,Arguments
),但是当您传入不可构造的浏览器对象Console
时,可能会发生非法构造函数错误或window.navigator
。
因此,有没有办法检测调用构造函数是否会导致TypeError而不诉诸try-catch
?