5

私が試したこと(クロムで動作します)

var class_str = "class Test {};";
var a = eval(class_str);
console.log(new a());

Firefox 46 で次のエラーが発生します。

TypeError: a is not a constructor

aは未定義で、 return を使用していnew A()ますReferenceError: A is not defined

Firefox との違いは何ですか?

4

2 に答える 2

10

クラス文字列全体を括弧で囲むと機能します。

固定コード:

var class_str = "(class Test {})";
var a = eval(class_str);
console.log(new a());
于 2016-09-02T19:11:19.390 に答える
1

かっこを使用するのと同じように機能する別の方法を試しましたが、かっこはグローバル名を汚染しないため、はるかに簡単に見えます。

result = eval(`(class a{})`)

console.log(result)

result = eval(`class a{} window.a=a`)

console.log(result)
于 2019-07-25T09:01:14.343 に答える