2016-05-15 6 views
0

カスタム作成オブジェクトは、オブジェクトメソッドである.toString() メソッドなどのメソッドにどのようにアクセスできますか。どのようにすべてのオブジェクトは、最終的には プロトタイプチェーンの最後にオブジェクトのコンストラクタを持ってカスタムオブジェクトはJavascriptオブジェクトからどのように継承されますか

This記事状態

オブジェクトにリンクするカスタムクラスです。つまり、Objectプロパティに追加されたメソッドまたはプロパティは、すべてのオブジェクトで自動的に使用可能になります。

上記の例では、rufus.toString()を呼び出した場合、javacript はrufusオブジェクト、Catオブジェクト、次にペット オブジェクトをチェックします。ペットオブジェクトのプロトタイプは、(オブジェクトリテラルショートカットを使用して)オブジェクト コンストラクタで作成されたので、Javascriptを今すぐ記事を読んだ後、私は順序であることを理解オブジェクトのプロトタイプ

に対してtoString()メソッドを見つけ、その後 う継承するオブジェクトから継承するオブジェクトの関数コンストラクタのプロトタイプで指定する必要があるオブジェクトを継承する。今私は、デフォルトでprototypeプロパティが空であることを読んでいます。オブジェクトがどのようにtoString()プロパティを持つことができますか?

私はのprototypeプロパティことを読んで:私は

が更新ペットオブジェクトのプロトタイプが(オブジェクトリテラルショートカットを使用して)Objectコンストラクタ で作成された

声明を理解しませんコンストラクタ関数はデフォルトでは空です。私は、すべてのJavaScript関数は、prototypeプロパティを持っている(この プロパティは、デフォルトでは空である)、ここで

まず見積もりを貼り付けているhereことを読んで、あなたがしたいときには、プロパティと、このprototypeプロパティにメソッド を添付します継承を実装します。

私たちはどのようにJavaScriptオブジェクトから継承しますか?

+0

*ここでは、デフォルトでプロトタイププロパティが空であることを読んでいます。*あなたはそれをどこで読んだのですか?オブジェクトのプロトタイプはプロトタイププロパティ(通常はコンストラクタに関連付けられています)と同じではありません**。 –

+0

@ torazaburoあなたは少し説明できますか?オブジェクトのプロトタイプとプロトタイププロパティの違いについて説明できますか?私はそれらを混合していると思っています。 –

+0

はい、私もあなたがいると思います。私が段落で与えることができるよりも、ウェブ上でより良い説明があります。 「プロトタイプと '__proto__'」などの違いを検索してください。 –

答えて

3

すべてのオブジェクトは、プロトタイプの継承を介してObjectのプロパティを継承します。あなたが行う場合:

var b = {}; 
console.log(b.__proto__) 

Objectから継承されたすべてのプロパティを見ることができます。

だから、何が起こるかは、あなたがb.toString()を行うとき、それはそれは、プロトタイプチェーンを続けるだろうし、最終的にこの機能を持っているObjectに達し、btoString()機能を探すということです。

EDIT:オブジェクト対

機能コンストラクタ:

だけ明確にする、のように定義された関数のコンストラクタ:

var a = function() { 
    this.b = "b"; 
    this.c = "c"; 
} 

functionにその原型が設定されています。これはconsole.log(a)で確認できます。

はしかし、我々はこのような新しいオブジェクト作成するaを使用します。

var d = new a(); 

をこれらのオブジェクトは、再び、console.log(d)を行うことによって確認することができ、Objectにその原型が設定されています。 、JavaScriptからDefinitive Guideの参照

詳細here.

+0

__proto__プロパティはprototypeプロパティへの参照であり、デフォルトでprototypeプロパティは明示的に指定されていない限り空です。どのようにカスタムオブジェクトは 'Object'から暗黙的に継承できますか? –

+0

どこを読んだのですか?詳細な理解については、https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype –

+0

を参照してください。私の投稿を更新し、urという質問に答えました –

0

{}つまりオブジェクトリテラルによって作成されたすべてのオブジェクトは、同じプロトタイプオブジェクトを持っている、と我々はとJavaScriptコードでは、このプロトタイプオブジェクトを参照することができますObject.prototypenewキーワードとコンストラクタ呼び出しを使用して作成されたオブジェクトは、コンストラクタ関数のprototypeプロパティの値をプロトタイプとして使用します。したがって、new Object()によって作成されたオブジェクトはによって作成されたオブジェクトと同じようにObject.prototypeから継承されます。同様に、new Array()によって作成されたオブジェクトは、Array.prototypeをプロトタイプとして使用し、new Date()によって作成されたオブジェクトは、Date.prototypeをプロトタイプとして使用します。

ので{}リテラルを使用して作成されたすべてのオブジェクトは、そのプロトタイプとしてObject.prototypeを持っており、たとえばtoString()ためObject.prototypeによって定義されたメソッドにアクセスする必要がありますなどなど

newオペレータは、新しいオブジェクトを作成し、初期化するために使用されます。 newキーワードは、関数呼び出しで使用する必要があります。 newキーワードで関数呼び出しを使用すると、コンストラクター呼び出しと呼ばれます。

newと関数呼び出しで作成されたオブジェクトは、コンストラクタのprototypeプロパティを継承します。したがって、new Date()で作成されたオブジェクトはDate.prototypeから継承され、new Array()で作成されたオブジェクトはArray.prototypeから継承されます。

このprototypeプロパティを変更して、オブジェクトを自分のカスタムオブジェクトから継承させることができます。例えば

function myFunction() { 
    this.name = 'a'; 
    this.age = 20; 
} 

myFunction.prototype = { 
    toString: function() { 
     // you can override default toString() method here.. 
    }, 

    // you can define as many functions here as you want. 
}; 

var myObj = new myFunction(); 

オブジェクトmyObjmyFunction.prototypeから継承されますと、このオブジェクトで定義されたすべてのメソッドは、myObjに利用できるようになります。

EcmaScript5は、以外のプロトタイプを持つオブジェクトを作成するための新しいメソッドObject.create()を定義します。例

var prototypeObject = {a: 1, b: 2, c: 3}; 
var obj1 = Object.create(prototypeObject); 

のために今obj1' will inherit from prototypeObject」としませObject.prototype

0

からあなたは

どのようにカスタム作成されたオブジェクトは、ある .toString()メソッドなどのメソッドへのアクセス権を持っているんを尋ねオブジェクトメソッド。どのようにカスタムクラス はオブジェクトにリンクされています

あなたが投稿したものを読んでからあなたが持っているように思えました。あなたはそれを持って、次にそれを忘れました。コードを入れずに質問に答える。

プログラミングでは、すべてのオブジェクトがデフォルトオブジェクトを継承します。これをJavaScriptのテンプレートと考えると、何かから始めなければならず、基本的なプロパティとメソッドがあり、その上に構築します。各オブジェクトには異なる基本プロパティがあります。 私は前の記事で、プロトタイプチェーンがここで終わると述べましたが、プロトタイプチェーンがヌルに終わるので、それは完全には正確ではありません。

関連する問題