JavaScriptがどのように継承されているかを深く理解する.

4472 ワード

最近ネットで一人の面接を見て、よく分からないところがたくさんあります.だから、文章を書いて、問題に対する理解を深めます.
文章の中で一つの問題に言及しました.JavaScriptはどのように継承を実現しますか?インターネットで見つけた方法や実例を紹介して、印象を深めます.
JavaScriptのfunctionは万能であることを知っています.使用する関数の定義以外に、種類の定義にも使えます.
JavaScriptの継承は、C++といくつかのオブジェクトに向けての言語とは違って、彼はpublic、prvateなどのアクセス制御修飾もないし、implementや他の特定の記号もないです.
javascript類の継承については、以下の例を参照してください.
 
  
<br>function Person() { <br>    // <br>    this.Gender = "female"; <br>    this.Age = 18; <br>    this.Words = "Silence"; <br>    // <br>    this.shouting = function() { <br>        alert(" ! "); <br>    } <br>} <br>// <br>function Programmer() { <br>    this.base = Person; <br>} <br>Programmer.prototype = new Person; <br>// <br>Programmer.prototype.typeCode = function() { <br>    alert(" !IT , 。 "); <br>} <br>// <br>function sayHello() { <br>    var a = new Programmer(); <br>    alert(a.Gender); // <br>    a.shouting(); // <br>    a.typeCode(); // <br>}        <br>sayHello(); <br>
上記の例では、まず一つのpersonクラスを宣言して、いくつかの属性と方法を含んでいます.それから、もう一つのプログレアム類を宣言しました.この属性は必要ではありません.しかし、規範として、今後は検索対象に継承される類型を書く必要があります.そしてプログレアムのプロトタイプのオブジェクトにpersonクラスをコピーしました.そして、クラスの継承が実現しました.
JavaScriptの中の類と継承のいくつか原理を模擬します.
オブジェクト指向の言語では、クラスを使ってカスタムオブジェクトを作成します.しかし、JavaScriptのすべてのものは対象です.どのような方法でカスタムオブジェクトを作成しますか?
これはもう一つの概念-プロトタイプを導入する必要があります.簡単にプロトタイプを一つのモデルとして見ることができます.新しく作成したユーザー定義の対象は全部このテンプレートのコピーです.
prototypeを通じてカスタムオブジェクトを作成する例を見てみましょう.
 
  
//
  function Person(name, sex) {
      this.name = name;
      this.sex = sex;
  }
  // Person ,
  Person.prototype = {
      getName: function() {
          return this.name;
      },
      getSex: function() {
          return this.sex;
      }
  }
ここでは関数Personをコンストラクションと呼びます.つまり、目的別のオブジェクトを作成する関数です.JavaScriptは構造関数とプロトタイプによるシミュレーションでクラスの機能を実現していることが分かります.
以下では一例を通して、カスタムオブジェクトを作成するjavascriptが行った具体的な仕事を具体的に説明します.
 
  
var zhang = new Person("ZhangSan", "man");
console.log(zhang.getName()); // "ZhangSan"
var chun = new Person("ChunHua", "woman");
console.log(chun.getName()); // "ChunHua"
コードvar zhang=new Person(「ZhangSan」、「man」)が実行されると、内部には以下のようなことがあります.
空白のオブジェクト(new Object()を作成します.Person.prototypeの属性をコピーしてこの空のオブジェクトにします.このオブジェクトをthisキーワードでコンストラクタに伝達し,コンストラクタを実行した.このオブジェクトに変数zhangを割り当てます.すべての仕事が完了しました.prototypeテンプレートが実例化されたオブジェクトにコピーされているのではなく、リンクされていることを証明するために、下記のコードを参照してください.
 
  
function Person(name, sex) {
    this.name = name;
    this.sex = sex;
}
Person.prototype.age = 20;
var zhang = new Person("ZhangSan", "man");
console.log(zhang.age); // 20
// prototype age
zhang.age = 19;
console.log(zhang.age); // 19
delete zhang.age;
// age , prototype
console.log(zhang.age); // 20
上記の例では、彼がコピーしただけであれば、このageという属性を削除した後、このオブジェクトの中には存在しなくなりますが、例の中のage属性はまだ出力されますか?それとも以前の値を上書きしますか?親の中のage属性は、見えないリンクを通してオブジェクトに存在します.
JavaScriptで簡単な継承はどうやって実現しますか?
以下の例は従業員タイプのEmployeeを作成します.Personからプロトタイプのすべての属性を継承しました.
 
  
function Employee(name, sex, employeeID) {
    this.name = name;
    this.sex = sex;
    this.employeeID = employeeID;
}
// Employee Person
// Person Person , Employee Person 。
Employee.prototype = new Person();
Employee.prototype.getEmployeeID = function() {
    return this.employeeID;
};
var zhang = new Employee("ZhangSan", "man", "1234");
console.log(zhang.getName()); // "ZhangSan
はい、以上はjavascriptの継承実現に関する具体的な過程と継承を実現する方法です.
もちろんまとめてみます.javascriptにおける継承メカニズムは、あくまでもシミュレーションによるもので、対象に向けた言語の中には、明らかに粗く、いくつかの欠陥があります.しかし、全体としては、フロントエンドの開発者の熱意を低下させるものではありません.