21

ECMAScript 仕様、セクション 8.7参照仕様タイプには次のように記載されています。

Reference型は、 、 、代入演算子などの演算子の動作を説明するために使用されdeleteますtypeof。[…] 参照は解決された名前バインディングです。

関数呼び出しは、参照を返すことが許可されています。この可能性は、純粋にホスト オブジェクトのために認められています。この仕様で定義されている組み込みの ECMAScript 関数は参照を返しません。また、ユーザー定義関数が参照を返すための規定もありません。

最後の 2 文が印象的でした。coolHostFn() = valueこれにより、 (有効な構文、btw) のようなことができます。だから私の質問は:

Reference結果が値になるホスト関数オブジェクトを定義する ECMAScript 実装はありますか?

4

1 に答える 1

7

Google Chrome のエンジンは、このように機能します。ReferenceError: Invalid left-hand side in assignmentただし、次のコマンドを実行すると、コンソールに次のメッセージが表示されることに気付くでしょう。

var myObj = new Object();
function myFunc() {
    myObj.test = "blah";
    return myObj;
}
myFunc() = new String("foobar");

ただし、これは初期エラーであり、v8 の ECMAScript 実装のためmyFunc、参照エラーを想定する前に正しく実行されれば機能するはずです。

では、v8 の現在の実装では? はい、いいえ。デフォルトで実装されていますが (言語の構造により)、機能は別の問題によって停止されています。coolHostFn() = valueエラーを返すべきではなく、実際に正しく実行できるはずです。ただし3=4、ほとんどの場合、左側の代入エラーを返す必要があります。

あなたの質問に対する正確な答えではありませんが、うまくいかない理由を明確にするのに役立つことを願っています。

(誰かが参加したい場合に備えて、問題/チケットは次のとおりです... http://code.google.com/p/v8/issues/detail?id=838

于 2012-10-30T16:50:25.483 に答える