私は本を読んでいるJavascript:良い部品。javascriptのNumberとFunction.prototypeの関係は何ですか?
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
Number.method('integer',function(){
return Math[this < 0 ? 'ceil' : 'floor'](this);
});
私は、コードの最初の部分は、上記のJavaScriptで任意の関数は、現在方法というメソッドを持っていることを意味だと思う:私は以下のコードを読んだとき、私は少し混乱しています。しかし、 "数"も関数ですか? Number.method
はなぜ意味がありますか?
NumberがObject.prototype(Number-> Number.prototype-> Object.prototype)を継承するNumber.prototypeを継承するとします.Numberには最初に「method」メソッドがないため、プロトタイプチェーン。しかしFunction.prototypeはチェーンにはないのですよね?
Number、Number.prototypeとFunction.prototypeの関係は何ですか?
UPDATE I:
私はいくつかの余分な情報を検索し、今より混乱していました。数値は実際には関数であり、Number instanceof Function
の値がtrue
であるため意味があるようですが、(-10/3) instanceof Number
の値はfalse
です。これは混乱しないでしょうか? JavaScriptでなどの数値が(3,2.5、(-10/3)など)数字でもない場合、はを呼び出すにはどうすればNumber
のメソッドですか?基本的に、解決
問題:
document.writeln((-10/3).integer());
UPDATE II(ラインは以下同じ本から来ています)。
Xophmeisterのヘルプ@のおかげで、今、私の結論は、それがFunction.prototype
にリンクされているようにNumber
がコンストラクタであるため、Number
はmethod
を呼び出すことができるということです。 JavaScriptで型がプリミティブ型である数値(3,2.5、(-10/3))は、オブジェクトNumber
のメソッドを呼び出すことができる理由は、this pageを参照する必要があります。
私はこの結論を基本的に@ Xophmeisterの助けと少しの検索から得ているので、十分正確ではないかもしれません。修正や完了は歓迎されます。
は(-10/3)数ではなく番号です。 – simon
@imonしかし、 'integer()'メソッドは 'Number'で定義されています。 (-10/3)が 'Number'でない場合、なぜ' integer() 'を呼び出すことができますか? – ChandlerQ
'-10/3'は' Number' *オブジェクト*ではなく、* type * 'number'を持ちます。私はECMA262仕様のセクション8.6.2と9.9がこれに関連していると思います。特にJSの '[[PrimitiveValue]]'と 'ToObject'内部構造のことです。このブログの記事はもっと良く説明するかもしれません:http://javascriptweblog.wordpress.com/2010/09/27/the-secret-life-of-javascript-primitives/ – Xophmeister