2016-08-16 3 views
0

複数のウェブサイトのチュートリアルを通って混乱していますが、今は以下の2つのステートメントの違いを見つけることができません。私は最初の行は、従業員REFERENCEはPersonコンストラクタに指摘示して知っているようにjavascriptの説明のプロトタイプの再利用性

Employee.prototype = Object.create(Person.prototype); 
Employee.prototype.constructor = Employee; 

(人従業員のスーパークラス/関数と仮定)。 PersonのコンストラクタはObject.create()によって作成されました。 Secondは単にEmployeeコンストラクタとして作成されます。

私はJavaプログラマーであり、javascriptが混乱していることを知っていますか?

+1

'Employee.prototype.constructor'の最初の行の後に' Person'があります。これは、関数の 'prototype.constructor'プロパティが常に関数そのものを指しているからです。したがって、例えば、2行目で行われていることを行うなどして、修正する必要があります。それはあなたが知りたいことですか?私はあなたが求めていることを本当に理解していません。 –

+0

私は単に両方のステートメントの意味を見ています。 –

答えて

2

javascriptのプロトタイプはjavaのクラスと似ています。だから、コード:

Employee.prototype = Object.create(Person.prototype); 
Employee.prototype.constructor = Employee; 

手段:

class Employee inherits new Person() { // meaning of first line 
    Employee constructor = Employee // meaning of second line 
} 

古典JavaScriptで、何のクラスが存在しない、代わりがあるコンストラクタ。そして、コンストラクタは、myFunction()の代わりにnew myFunction()で呼び出す通常の関数です。

そして、クラスに属するコンストラクタの代わりに、javascriptのプロトタイプ(クラスのようなオブジェクト)はコンストラクタのプロパティです。そして、はい、関数は、他のオブジェクトと同じようにプロパティを持つことができるように、javascriptの他のものと同じようにオブジェクトです。

また、javascriptコンストラクタでは、コンストラクタを継承することはできません(愚かではありません:D)。代わりに、コンストラクタはオブジェクトから継承します(厳密に言えば、コンストラクタを呼び出すと継承が発生するため、オブジェクトはオブジェクトから継承します)。そのため、スーパークラスオブジェクトのインスタンスを作成して継承できるようにするためです。

技術的には、Employee.prototype.constructorという行は必須ではありません。最初の行は、継承を設定するために必要なすべてです。

関連する問題