JavaScript instanceof错误

时间:2014-08-19 08:17:40

标签: javascript instanceof throw

我试图将错误作为对象抛出,这样我就可以创建一个if语句来检查错误是否是紧急错误。为此,我需要检查是否error instanceof myEmergencyFunc。但是如果我有一个子功能,这就失败了。请将此小提琴作为示例:http://jsfiddle.net/tvs4qjgs/

var someName = function(){
    this.LogEmergency = function(message){
        this.message = message;
        return this;
    };
    return this;
};

var a = someName().LogEmergency('my error');

console.log(a instanceof someName().LogEmergency);

我做错了什么?

1 个答案:

答案 0 :(得分:1)

<强>问题

var a = someName().LogEmergency('my error');

a指的是全局对象,而不是您认为已创建的对象(如果您在浏览器中运行此代码,则为window

console.log(a === window) - &gt;将是真的。

你的最终结果是错误的,因为你正在与错误的对象进行比较。如果你想知道为什么,那是因为你在创建对象时错过了关键字new。 使用new调用函数会触发创建新对象并返回它的构造函数机制。

调用一个没有new的函数并返回&#34;这个&#34;函数内部返回全局对象。

您必须对代码进行以下更改

var someName = function(){
  this.LogEmergency = function(message){
    this.message = message;
    return this;  // here this refers to the new object you created
  };
  return this; // here also this refers to the new object you created
               // here the return is redundant as this is implicit.
};

// new operator is the keyword for creating objects.
// the meaning of "this" inside the function completely changes without the operator
var a = new someName().LogEmergency('my error'); 
上面代码中的

a现在引用您创建的新实例。 最后检查创建的对象是否是someone

的实例
console.log(a instanceof someName); //will be true

阅读有关构造函数here

的更多信息