2017-11-10 3 views
0

JavaScriptのプロトタイプチェーンと継承についてはかなり混乱しています。たとえば、Date()オブジェクトには、Date.now()などのメンバーメソッド/関数があります。それで、なぜDate()オブジェクトの新しいインスタンスを作成し、now()メソッドを呼び出すとエラーになるのですか? new Date.now() しかし、getTimeのようなプロトタイプメソッドを呼び出すときは、new Date().getTime()の呼び出しは機能しますが、新しいインスタンスを作成することなくDate().getTime()を呼び出すことはできません。何故ですか?オブジェクトのプロトタイプが元のオブジェクトの一部になるという理解がありましたか?たとえば :プロトタイプとクラス/コンストラクタ/オブジェクトメンバ

function Person(firstName, lastName) { 
    this.firstname = firstName; 
    this.lastname = lastName; 
    this.getfirstName =() => { 
       return this.firstName; 
    } 
} 

Person.prototype.getlastName =() => { 
     return this.lastName; 
} 

は、プロトタイプの方法がPersonのメンバーメソッドとなり、getlastNameませんが、それが日のためのgetTime()()を使用しなければならないかのようnewキーワードを使用せずにアクセスすることができますか?

+0

'getLastName'は、それがインスタンスに作用を意味this.lastName'た'戻っています。チェックアウトhttp://javascriptissexy.com/javascript-prototype-in​​-plain-detailed-language/それはいくつかのことをクリアするかもしれません。 –

答えて

1

Prototypeは、インスタンスメソッドを追加します。つまり、クラスのインスタンスにアタッチされます。

:あなたは getlastNameは、クラス自体に取り付けられるようにしたい場合は、あなたが Prototypeを使用する必要はありません

new Person("first","last").getlastName(); 

var p = new Person("first","last"); 
p.getlastName(); 

または

:そうのようなあなた例えば、機能 getlastNameにのみ呼び出されます
Person.getlastName =() => { return this.lastName } 

Dateクラスの場合、nowは静的メソッドです(Prototype)、getTimeはインスタンスメソッド(Prototypeを使用)です。あなたは、そのドキュメントでそれを見ることができます:ここでhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

は、静的およびプロトタイプメソッドへの参照です:http://blog.anselmbradford.com/2009/04/09/object-oriented-javascript-tip-creating-static-methods-instance-methods/

+0

私は参照してください。それは少し物事をクリアします。どうもありがとうございました。私はC + +の背景から来て、それは私を完全に混乱させています。しかしもう一つだけ。 getlastName()をクラス自体にアタッチし、 'Person.getlastName =()=> {return this.lastName} 'を実行するようにしたい場合は、コンストラクタ自体で定義されているものと同じでしょう'getfirstName()'?あなたが提案したようにそれを添付すれば、Person.getlatName()を実行するだけでアクセスでき、lastnameが返されますか? – henhen