2016-06-18 7 views

答えて

3

Object自体ようObject.keysとして定義されるいくつかの方法を有しています。これらはObject.prototypeで定義されていないため、オブジェクトインスタンスでは使用できません。

+0

一顧、いや、私はこれは、私にはそれがないのプロトタイプ – neaumusic

+0

ナにヘルパー関数を入れないことは非常に奇妙明らかではなかったのか分かりません。それが起こった場合は、 'キー()というメソッドを定義することができないだろう'例えば、それは後方互換性の –

1

(コンストラクタ)は、タイプobjectではありません.JSで使用する用語に応じて、クラス/関数です。それはクラスであるため、そのオブジェクトのインスタンスでは使用されないメソッドがあります。 IE:返されるオブジェクトプロトタイプにはありません。 Chromeのコンソールで

、この試してみてください。

var obj = {}; 
typeof obj; // "object" 
typeof Object; // "function" 

あなたはチャンスを得るときに、クラスのプロトタイプは、JSで動作する方法を調べてください。

ビットを明確にするために、new Object()を実行すると、必要なメソッドがあるタイプobjectのものが返されます。

私は、これは私が話しているかの良い参考だと思う:JavaScript - The Good Parts: Function prototypes vs Object prototypes

あなたがNumberStringと同じ動作を確認することができます。 のタイプは、どちらも実際にはfunctionですが、作成されると、numberまたはstringのいずれかのタイプが得られ、それぞれに関連するプロトタイプメソッドが用意されています。

最終行はコンストラクタと戻り値が同じではありません。

+0

どのような文字列や数値についてにとっては悪夢だろうか? – JordanHendrix

+0

これは – JordanHendrix

+0

@JordanHendrix実はそうではありません...ちょうど間違っています。 – Jacques

3

コンストラクタ、メソッド、2つの別個の種類がありますConstructor.prototypeのプロパティとして定義

  • 原型方法

    を、ザは、インスタンス上でのみ利用可能です。

  • 静的メソッドConstructor自体のプロパティとして定義

    、ザ・コンストラクタにのみ利用可能です。

ES6クラッセは

class Constructor { 
    static foo() { return 123; } 
    bar() { return 456; } 
} 
Constructor.foo(); // 123 
Constructor.bar; // undefined 
new Constructor().foo; // undefined 
new Constructor().bar; // 456 

それを明確にあなたの場合は、しかし、特別です:Objectコンストラクタの静的メソッドは、プロトタイプのメソッドを含めるように見えます。しかし、ObjectObject.prototypeを継承しているからです。

プロトタイプチェーンは

使用しているIDE
  • Objectインスタンス

    instance -> Object.prototype -> null 
    
  • Objectコンストラクタ

    Object -> Function.prototype -> Object.prototype -> null 
    
+2

母、あなたは私よりもそれをよく説明しなければなりませんでした+1 – Jacques

関連する問題