0

js には、「Function」という名前の関数があります。そのインスタンスは関数を返します:

var myfunc = new Function('arg1','arg2','return arg1+arg2');

この例では、変数myfuncには、指定された 2 つのパラメーターの合計を返す関数が含まれています。

私の質問は、Functionが関数である可能性はどのようにあるのでしょうか? それ自体のインスタンスにすることはできません。Objectも関数であり、 Function のインスタンスです。ただし、関数はオブジェクトであるため、関数はオブジェクトのインスタンスです。

そして、それがどのように可能か理解できません。それは無限ループです...

ありがとう。

4

2 に答える 2

2

ObjectFunctionなどは確かに関数です-正確にはコンストラクタ関数です。

次のようなオブジェクトを作成することを思い出してください。

function MyObject() {
    this.foo = 'bar';
}

var my = new MyObject();
alert(my.foo);

ちなみに、使用new Function(...)は通常悪い考えです。あなたの例は、次のようにはるかにきれいになります。

function myfunc(arg1, arg2) { return arg1 + arg2 }

また

var myfunc = function(arg1, arg2) { return arg1 + arg2 };

そのため、本番環境で使用する理由はほとんどありませんnew Function()(ただし、テンプレート エンジンは適切なユースケースです)。

于 2012-07-02T22:35:01.193 に答える
1

些細な答えは「ECMA-262がそう言っているから」です。

Function 、 Object 、 Array 、 Dateなどのオブジェクトは組み込みオブジェクトであるため、通常の方法では構築されません。それら、それらのプロトタイプ、およびそれらの間の関係は[[Prototype]]、ECMA-262 に従って環境によって確立されます。したがって、Functionは、Object.prototype から継承する独自のプロトタイプ(つまり) から継承します。Function.prototype === Function[[Prototype]]

于 2012-07-02T22:56:13.270 に答える