2

私のタイムゾーンでおはよう.

私は JavaScript の継承を学んでおり、MDN ページを読み始めています。継承チェーンを構築するには、コンストラクターのプロトタイプ プロパティを使用する必要があることを理解しています。たとえば、次のようになります。

function Employee(){
 this.name = "Dave";
 this.dept = "";
}

function Manager(){
 this.projects = [];
}
Manager.prototype = new Employee;

これを行う場合:

var jane = new Manager();

jane.name -> Employee オブジェクトで検出されるため、「Dave」を取得します。

私が理解できないのは、あなたがこのようにする場合です:

 function Employee(name,dept){
 this.name = name || "Dave";
 this.dept = dept || "General";
}

function Manager(){
 this.base = Employee;
 this.base("Jack","CustpmDept");
 this.projects = [];
}

今私が同じことをしたら:

var jane = new Manager();

jane.name -> Employee オブジェクトで見つかるため、"Jack" を取得します。

この最後の例では、行 Manager.prototype = new Employee; を使用しませんでした。そして、それはまだ機能します.Managerオブジェクトは、プロトタイプオブジェクトとしてEmployeeオブジェクトを持っています. これはどのように可能ですか?あなたは私を明確にすることができます

前もって感謝します

よろしくお願いします

4

5 に答える 5

3

次のコードを確認してください。

function Employee(name,dept){
    this.name = name || "Dave";
    this.dept = dept || "General";
    console.log(this instanceof Manager);
}

function Manager(){
     this.base = Employee;
     this.base("Jack","CustpmDept");
     this.projects = [];
}

var jane = new Manager();
console.log(jane.name);

例では

console.log(this instanceof Manager);

trueを返すのは、呼び出すときに

this.base = Employee;

基本的に Manager のthisEmployeeに送信しています。this.namethis.deptは実際にはManagerに関連付けられています。

于 2013-09-13T06:46:56.140 に答える
1

2 番目の方法は、コンストラクターのスチールに似ています。コンストラクターthis.base("Jack","CustpmDept");を呼び出します。これは、インスタンスを新規作成するときに作成されるオブジェクトをキーワードが指すため、jane がこれらのプロパティを取得できるためです。Employeethis

于 2013-09-13T06:41:23.270 に答える
0

後者の場合、 'Jack' を返します。これは、'this' が 'Manager' であるため、またはこの場合は 'jane' であるため、'Jack' に設定された whichnew Manager()を呼び出すためです。this.Employee('Jack', 'CustpmDept')jane.name

少し混乱します。

于 2013-09-13T06:42:04.740 に答える