在JavaScript中检测“非法构造函数”

时间:2013-01-18 17:31:22

标签: javascript constructor try-catch

有没有办法检测调用构造函数是否会导致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对象(NodeListsArguments),但是当您传入不可构造的浏览器对象Console时,可能会发生非法构造函数错误或window.navigator

因此,有没有办法检测调用构造函数是否会导致TypeError而不诉诸try-catch

0 个答案:

没有答案