2012-10-29 8 views
18

EcmaScript specification, section 8.7 The Reference Specification Typeを読む参照を返すEcmascript関数の実際の例は?

Referenceタイプはdeletetypeof、及び代入演算子のような演算子の動作を説明するために使用されます。 [...]参照は解決された名前バインディングです。

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

最後の2つの文章が私に印象づけました。これで、coolHostFn() = valuevalid syntax、btw)のようなことができます。だから私の質問は:

Referenceという結果になるホスト関数オブジェクトを定義するEcmaScriptの実装はありますか?

+2

? http://stackoverflow.com/questions/3709866/whats-a-valid-left-hand-side-expression-in-javascript-grammar – bfavaretto

+0

はい、そうだと思います。その質問は私が上で使用した構文が有効であることを証明します:-) – Bergi

+0

私はグーグルで '' javascript'を返し、最初のページを見ましたが、何もありませんでした。 –

答えて

6

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)関連

+1

クロムがそのような機能をまったくサポートしていないことに感謝します。しかし、実際には「このような機能はありますか?」という質問には答えません。 ( 'myFunc'をコーディングできないので、ホストオブジェクトでなければなりません) – Bergi

+0

確かに。私はコメントする担当者を持っていないので、私は答えに打ちひもを取ると思った。 "そのような機能はありますか?"はいです。 Chromeによる非サポートは、実際には、特定の実装をサポートしていない、または意図していない機能ではなく、バグです。そして、ええ、例は少しスケッチしていた。できるだけベストを説明しようと一緒に投げただけです。 :) – Swivel

関連する問題