var err1 = Error('message');
var err2 = new Error('message');
違いは何ですか?それらをChromeコンソールで見ると、同じに見えます。オブジェクトと同じ__proto__
チェーンの同じプロパティ。ほとんどError
工場のように振る舞うようです。
どちらが正しいのですか?その理由は?
var err1 = Error('message');
var err2 = new Error('message');
違いは何ですか?それらをChromeコンソールで見ると、同じに見えます。オブジェクトと同じ__proto__
チェーンの同じプロパティ。ほとんどError
工場のように振る舞うようです。
どちらが正しいのですか?その理由は?
回答:
Error
いくつかの他のネイティブコンストラクタと同様に、工場のように振る舞うんArray
、Object
などのようにすべてのチェック何かをif (!(this instanceof Array)) { return new Array(arguments); }
。(しかし、注目すべきことString(x)
とnew String(x)
は非常に異なる、と同様にするためのものであるNumber
とBoolean
。)
、エラーの場合には、さえスローする必要はないと述べているError
オブジェクトを... throw 'Bad things happened';
動作しますが、あまりにも
あなたも、デバッグするためのオブジェクトリテラルを投げることができます。
throw {message:"You've been a naughty boy",
context: this,
args: arguments,
more:'More custom info here'};
String("abc")
はString
オブジェクトを作成しませんが、作成しますnew String("abc")
。
Object
=>は、Object('foo')
文字列オブジェクトを返します...それの事に来るほとんどすべてのネイティブのコンストラクタをビット間違っている... Number
、Boolean
、Date
、String
すべてが...ないArray
、Object
とError
やります、しかしEvent
、すべてのDOMxxxx
-apiコンストラクターはエラーをスローします
new Array(arguments)
正確には何もしないと思いますArray(1, 2, 3)
。しかし、おそらく私はつまらないです:)
Error
インスタンス(または文字列リテラル)をスローすると、スタックトレースが失われます。リンクされた記事のarguments.callee
new
ます。