6

私は本Javascript:GoodPartsを読んでいます。以下のコードを読んだとき、私は少し混乱しています:

Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};

Number.method('integer',function(){
    return Math[this < 0 ? 'ceil' : 'floor'](this);
});

上記のコードの最初の部分は、JavaScriptのすべての関数にmethodというメソッドがあることを意味していると思います。しかし、「数」も機能ですか?なぜNumber.method意味があるのですか?

NumberはObject.prototype(Number-> Number.prototype-> Object.prototype)を継承するNumber.prototypeを継承していると思います。これは、Numberには最初に「メソッド」メソッドがないため、プロトタイプチェーンに沿って検索します。しかし、Function.prototypeはチェーンに含まれていませんよね?

Number、Number.prototype、Function.prototypeの関係は何ですか?


更新I:

私はいくつかの追加情報を検索しましたが、今はもっと混乱しています。Numberは実際には関数であり、の値はであるため、これは理にかなっているように思われると言う人もいますNumber instanceof Functiontrueしかし、の値は(-10 / 3) instanceof Numberですfalse。これは紛らわしいことではありませんか?数学の数値(3、2.5、(-10/3)など)がNumberJavaScriptの数値でもない場合、どのようにしてどちらのメソッドを(-10 / 3)呼び出すことができますか?(以下の行は同じ本からのものです)integer()Number

 document.writeln((-10 / 3).integer());

更新II:

基本的に問題は解決しました。

@Xophmeisterの助けのおかげで、私の結論は、がコンストラクターであるためにNumber呼び出すmethodことNumberができるため、にリンクされているということですFunction.prototype。JavaScriptでプリミティブ型のnumber(3、2.5、(-10/3))がオブジェクトの持つメソッドを呼び出すことができる理由については、このページNumberを参照してください。

私は基本的に@Xophmeisterの助けと少しの検索からこの結論を得たので、それは十分に正確ではないかもしれません。訂正または完了を歓迎します。

4

1 に答える 1

3

プロトタイプチェーンは次のとおりです:Object>> :FunctionNumber

Number instanceof Function; // true
Number instanceof Object;   // true
Function instanceof Object; // true
于 2013-03-27T10:46:21.923 に答える