我试图将错误作为对象抛出,这样我就可以创建一个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);
我做错了什么?
答案 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
的更多信息