2013-03-27 9 views
6

私は本を読んでいる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がコンストラクタであるため、Numbermethodを呼び出すことができるということです。 JavaScriptで型がプリミティブ型である数値(3,2.5、(-10/3))は、オブジェクトNumberのメソッドを呼び出すことができる理由は、this pageを参照する必要があります。

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

+0

は(-10/3)数ではなく番号です。 – simon

+0

@imonしかし、 'integer()'メソッドは 'Number'で定義されています。 (-10/3)が 'Number'でない場合、なぜ' integer() 'を呼び出すことができますか? – ChandlerQ

+0

'-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

答えて

3

Iプロトタイプ鎖であると信じて:>Number>FunctionObject

Number instanceof Function; // true 
Number instanceof Object; // true 
Function instanceof Object; // true 
+0

'Object instanceof Function'は' true'も返します。 –

+0

これは、関数がJavaScriptの一流の市民であるためです。 – Xophmeister

+0

@ neustroev.aiと同様に、 'Object instanceof Function'は' true'です。それは、JavaScriptのすべてのオブジェクトが関数であることを意味しますか? – ChandlerQ

関連する問題