私は本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 Function
。true
しかし、の値は(-10 / 3) instanceof Number
ですfalse
。これは紛らわしいことではありませんか?数学の数値(3、2.5、(-10/3)など)がNumber
JavaScriptの数値でもない場合、どのようにしてどちらのメソッドを(-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の助けと少しの検索からこの結論を得たので、それは十分に正確ではないかもしれません。訂正または完了を歓迎します。