2017-03-12 4 views
0

私はFunctionを読んでいます。だから私はに関数式に関数の宣言を変換しようとする新しい関数新しい機能に間違いはありますか?

var Foo = new Function(['name', 'age'], 'Foo.prototype.name=name;Foo.prototype.age=age;'); 
 
var foo = new Foo(1,2); // error: Foo is not defined 
 
console.log(Foo.prototype.hasOwnProperty('name')); 
 
console.log(foo.hasOwnProperty('name'));

間違いがあります:

function Foo(name, age) { 
    Foo.prototype.name = name; 
    Foo.prototype.age = age; 
} 
var foo = new Foo(1,2); // this is ok 
console.log(Foo.prototype.hasOwnProperty('name')); 
console.log(foo.hasOwnProperty('name')); 

ただし、変換後のエラーがある:しかし、私は以下のコードで立ち往生していますか?どんな答えが役に立つでしょう。

コードは、クロムのブラウザに表示されています。しかしそれは、プラットフォーム上でエラーになります:

  • nodejs:6.10
  • win7の64ビット
+0

Fooをログに記録し、それが機能であるかどうか確認することができます – CaptainHere

+0

なぜそれをしたいですか? – Pointy

+0

あなたが書いたものはどれも意味をなさない... –

答えて

1

Functionはしばらく、それを少なくともない達することができる場所var Fooが定義されていないため、エラーがありますノードを使用します。

new Function()コンストラクタを使用して文字列から関数を作成すると、その関数は作成された場所に関係なく、グローバルスコープにのみアクセスできます。

ノードモジュール内にある場合、var Foovar fooはグローバル変数ではありません。それらは現在のファイル/モジュール内にのみ存在するローカル変数であり、 "module"スコープ内にあります。

var bar = 'bar'; 
console.log(bar);  // function 
console.log(global.bar); // undefined 

new Function()Fooアクセスできるようにするには、グローバル変数(または globalオブジェクトのプロパティ)として、後者を定義する必要があります。

global.Foo = new Function(['name', 'age'], 'Foo.prototype.name=name;Foo.prototype.age=age;'); 
var foo = new Foo(1,2); 
// ... 

Though, you should be aware that modifying the global scope/object like this is generally frowned upon in Node, since this goes against its intent/design of using isolated modules.


けれどもが、式から関数を定義するために、あなたはFunctionコンストラクタを使用する必要はありません。代入演算子の後など、place the declaration where an Expression is expectedを代用することもできます。

var Foo = function (name, age) { 
    Foo.prototype.name = name; 
    Foo.prototype.age = age; 
}; 
var foo = new Foo(1,2); // this is ok 
// ... 
関連する問題