5

以下の関数で toString() を呼び出すと、ブラウザ間で異なる文字列が返されます。これは、ECMA-262 15.3.4.2 が各ベンダーに柔軟な余地を残しているためだと理解しています。

Chrome は、すべての構文に加えてコメントを返します。残念ながら、Firefox 3.6 ではコメントが省略されています。Firefox の動作に基づいて、IE、Opera、または Safari はテストしていません。

function foo() {
    /* comment */
    var bar = true;
}

具体的には、関数内の特別にフォーマットされたコメント ブロック内にメタ データを埋め込もうとしています。その後、関数 toString() メソッドの戻り値が解析され、値がオブジェクトとして返されます。

互換性テーブルまたは toString() の代替を見つけることができませんでした。コミュニティにはアイデアがありますか?ところで、JS ファイルの前処理はオプションではありません。:(

どうもありがとう。:)

4

3 に答える 3

1

私は最近この質問に答えようとしていて、これに出くわしました。更新を提供するために、互換性テーブルがまだ見つからなかったため、次のフィドルを作成しました。

https://jsfiddle.net/deamvp7r/

if((function(){ /*test*/ }).toString().match('test').length === 0) {
    alert ("NO SUPPORT");   
} else {
     alert ("SUPPORTED");   
}

BrowserStackで手動でテストしました。参考までに、私がテストしたブラウザーと、Function.toString() でのコメントのサポートに関する限り、私が見つけたものを以下に示します。

  • IE8 - 11 : コメントをサポート
  • Firefox <= 16 : サポートなし
  • Firefox >= 17 : コメントをサポート
  • Chrome 14 + : コメントをサポート
  • IOS iPhone 3GS ブラウザ + : コメントをサポート
  • iPad 1 + : コメントをサポート
  • Android 2.3 (Galaxy) + : コメントをサポート

このリストがすべてを網羅しているわけではないことは明らかです。そのため、古いブラウザーやあまり知られていないブラウザーをまだサポートする必要がある場合は注意してください。しかし、現在、コメントをサポートしている一般的なブラウザーの割合はかなり高いようです。

于 2015-04-18T23:58:16.960 に答える
1

コメントを埋め込むほど直接的ではありませんが、関数は JS の第一級オブジェクトであるため、任意のプロパティを指定できます。例えば:

> function f(x) { return x * x; }
undefined
> f
function f(x) { return x * x; }
> f.comment = 'Hello'
Hello
> f.comment
Hello

このようにして、メタデータを関数オブジェクトにきれいに移植可能に埋め込むことができます。

于 2010-04-16T04:32:52.207 に答える
0

「注釈」機能は、あなたがやろうとしていることに対する良い解決策です。現在、Traceur に実装されています (こちらを参照)。注釈は@、次のような構文を使用します。

@Anno('foo')
function func() {}

本質的にこれは

function func() {}
func.annotate = [ new Anno('foo') ];

ES6 クラスにも注釈を付けることができます。

新しい注釈構文を使用できない、または使用したくない場合でも、メタデータを含むプロパティで関数を装飾することは、コメントとしてかどうかにかかわらず、そのようなメタデータを関数本体に埋め込むよりも良い考えのようです (1 つのアイデアは何かです)。 ) に類似して"use strict"おり、文字列操作を使用して抽出しようとしています。

注釈機能はまだ議論の段階にあり、「デコレータ」などと呼ばれるバリエーションの並行提案があります。おそらくご存知のように、概念自体は新しいものではなく、Python、Java、C# などの他の言語にも見られます。注釈は、AtScript、TypeScript、ES7 などの言語フレーバーに含めることが検討されています。

JavaScript 注釈も参照してください。解析ベースのアプローチについては、http://ariya.ofilabs.com/2014/04/tracking-javascript-annotations.html を参照してください

于 2015-04-19T03:04:46.090 に答える