DTPab

DTPにまつわるあれこれ

ExtendScriptのErrorオブジェクトのプロパティ

書いてるスクリプトで改めてErrorオブジェクトについて調べたので自分用のメモです。というのもどうやらJavaScriptの一般的なErrorオブジェクトと違い、プロパティをAdobe ExtendScript用に拡張しているっぽいのですね。

プロパティ

プロパティ 説明
fileName String エラーが起きたスクリプトファイル名*1
line Number エラーが起きた行数
message String エラーメッセージ
source String エラーが起きた場所のソースコード

他にもいくつかプロパティがあるんだけど、何に使っているか、どう使うのか全然分からず。

f:id:uske_S:20200706144349p:plain
VSCodeのESDebuggerでErrorオブジェクトを見たところ

ExtendScriptでの仕様と気づいたこと

  • new演算子はあってもなくてもErrorオブジェクトを返す
    var e1 = new Error("hoge");var e2 = Error("hoge");は実質同じ
  • どの種のエラー(TypeError()とかReferenceError()とか)でも、全部同じErrorコンストラクタのインスタンス
  • ヘルパーオブジェクトの$.errormessageが空のErrorオブジェクトを生成する

インスタンス化

Error()を関数呼び出し、ないしnew演算子をつけてコンストラクタ呼び出しを行う。引数は3つ渡せるが1つで足りる。

var e = Error("The end of the world!");

$.writeln(e.constructor.name); //Error
$.writeln(e.message); //The end of the world!
$.writeln(e.fileName); //filename
$.writeln(e.line); //1

省略可な第2引数にはファイル名(String)、第3引数にはエラーが起きた行番号(Number)を渡せるんだけど、渡しても渡さなくても同じ。

var e = Error("The end of the world!", $.fileName, $.line);

$.writeln(e.constructor.name); //Error
$.writeln(e.message); //The end of the world!
$.writeln(e.fileName); //filename
$.writeln(e.line); //1

まぁわざわざ渡さないでいいでしょ。

$.errorでもErrorオブジェクトをインスタンス化できるものの、同時にmessageプロパティを渡せないので不便。使う意味はなさそう。

参照

先の変数eをそのまま$.writeln()メソッドなどに突っ込むとmessageプロパティが参照されるもよう。

var e = Error("The end of the world!", $.fileName, $.line);

$.writeln(e); // Error: The end of the world!

ただご覧のように単純に参照されるわけではなく、頭に Error: と付く。

*1:イベントに定義したコールバック中だとどうやら undefined になるっぽい