2016-08-25 6 views
0

にこれはで、私は次の行を削除した場合、多型の例を実証するための一例です。もしそうなら、この例はどのように多型を示していますか?これらの行にコメントすると、私は2つの関数があることを知ります。マジックはどこにありますか?ポリモーフィズム使用例のエラーはJavaScriptを

HTML:

<script type="text/javascript"> 
    function Person(age, weight) { 
    this.age=age; 
    this.weight=weight; 
    this.getInfo=function() { 
     return "I am " + this.age + " years old " + 
     "and weighs " + this.weight +" kilo."; 
    } 
    } 
    function Employee(age, weight, salary){ 
    this.salary=salary; 
    this.age=age; 
    this.weight=weight; 
    this.getInfo=function() { 
     return "I am " + this.age + " years old " + 
     "and weighs " + this.weight +" kilo " + 
     "and earns " + this.salary + " dollar."; 
    } 
    } 
    Employee.prototype= new Person(); 
    Employee.prototype.constructor=Employee; 
// The argument, 'obj', can be of any kind 
// which method, getInfo(), to be executed depend on the object 
// that 'obj' refer to. 
    function showInfo(obj) { 
    document.write(obj.getInfo()+"<br>"); 
    } 
    var person = new Person(50,90); 
    var employee = new Employee(43,80,50000); 
    showInfo(person); 
    showInfo(employee); 
</script> 

結果

enter image description here

リファレンス

http://w3processing.com/index.php?subMenuItemId=329

答えて

1

これは実際に気付いた問題(例:すなわち、「基本クラスのコンストラクタPerson呼び出すことはありません)

  1. Employee機能(すなわち、コンストラクタ:Employee.prototypeセットアップは、プロトタイプの機能は、ここで私が見る他の問題のカップルです)の例で使用されることはありません余分にあります関数 - 親子関係にあることを前提に、これが適切な位置にあると考えられます。上記の問題の結果として
  2. Employee関数は、コードのコピー&ペーストParent機能からあります

    this.salary=salary; this.age=age; this.weight=weight;

  3. 同上getInfo機能のために - 両方のコンストラクタは、特定の関数を作成し、それを割り当てます〜this;それはつまり、上getInfoを同じ関数名を使用することで、それは多分、そう相続

    を証明するために、本当に唯一のことは、この例の賛成で言うことができなければならない - とgetInfoEmployeeバージョンは、基本クラスのバージョンを呼び出しことはありませんPersonおよびEmployeeを呼び出し、共通コードを使用して2つのオブジェクトに対してそれらを呼び出します。多型の例が、おそらく「メソッド」

    JavaScriptがそのクラスベースの言語は、それらを定義する形で、「メソッド」を持っていないの継承基本1

+0

MDN LINKにそれは素晴らしいだろう探しているものを見つけることができます。親切に、助けて! – Deadpool

+0

プロトタイプベースの多型の議論については、[this post](http://stackoverflow.com/questions/39117168/how-to-properly-subclass-a-subclass-in-javascript)を参照してください。 [このフィドル](https://jsfiddle.net/6x0agapd/)は、上記の記事で説明したコードを修正し、多態性の実例です。 – Dhananjay

1

と呼ぶことができます。 JavaScriptでは、任意の関数をプロパティの形でオブジェクトに追加できます。継承された関数は、上記のプロパティシャドウイング(この場合はメソッドオーバーライドの一種)を含む他のプロパティと同様に機能します。

継承された関数が実行されると、この値は継承するオブジェクトを指し、関数が独自のプロパティであるプロトタイプオブジェクトを指しません。

var o = { 
     a: 2, 
     m: function(b){ 
     return this.a + 1; 
     } 
    }; 

    console.log(o.m()); // 3 
    // When calling o.m in this case, 'this' refers to o 

    var p = Object.create(o); 
    // p is an object that inherits from o 

    p.a = 4; // creates an own property 'a' on p 
    console.log(p.m()); // 5 
    // when p.m is called, 'this' refers to p. 
    // So when p inherits the function m of o, 
    // 'this.a' means p.a, the own property 'a' of p 

あなたはあなたがフィドルを追加したり、JSにおける多型の振る舞いを学ぶためのもっともらしい例を提供できるかどう

関連する問題