首頁  >  文章  >  web前端  >  JS子類別如何實作用Object.getPrototypeOf去呼叫父類

JS子類別如何實作用Object.getPrototypeOf去呼叫父類

零到壹度
零到壹度原創
2018-03-22 11:46:091735瀏覽

這次帶給大家JS子類別如何實作用Object.getPrototypeOf去呼叫父類,下面就是實戰案例,一起跟隨小編的腳步來看一下。

每個function有個prototype屬性,稱為原型。每個物件也有原型,Firefox/Safari/Chrome/Opera 中可以透過__proto__來訪問,IE6/7/8中沒有提供相關介面。

function Person(){
this.method1 = function(){}
}
Person.prototype.method2 = function(){}
function Man(){}
Man.prototype = new Person();
Man.prototype.m1 = function(){}
Man.prototype.m2 = function(){}
var m = new Man();
for(var a in m.__proto__){
alert(a);
}

定義了父類別Person,子類別Man。 new一個Man的對象,印出所有屬性。

ECMAScript V5為Object新增了靜態的getPrototypeOf方法( Firefox/Chrome已實現 ),用來取得物件的原型。用它可以模仿Java的super。

function Person(){
this.method1 = function(){alert(1)}
}
Person.prototype.method2 = function(){alert(2);}
function Man(){
this.m1 = function(){
Object.getPrototypeOf(this).method1();
}
}
Man.prototype = new Person();//原型继承
Man.prototype.m2 = function(){
Object.getPrototypeOf(this).method2();
}
var man = new Man();
man.m1();
man.m2();


子類別Man中掛在this上的m1方法中呼叫父類別Person中掛在this上的method1,掛在prototype上的m2方法呼叫父類別prototype上的method2。

以上可以看出物件原型不但包含其建構器prototype上的屬性,也包含建構器中this上的屬性。當然由於JavaScript中上下文的原因,父類別中的this不能在子類別中不能很好的自動轉換,需要一些技巧完成。

 Java中是這樣的

package bao1;
class Person {
    private String name;
    Person(String name) {
      this.name = name;
  }
  public void method1() {
      System.out.println(this.name);
    }
  }
      class Man extends Person{
        Man(String name) {
          super(name);
    }
    public void m1() {
       super.method1();
      }
    }
     public class Test 
     {public static void main(String[] args) {
     Man man1 = new Man("Jack");man1.m1();
    }
  }

以上是JS子類別如何實作用Object.getPrototypeOf去呼叫父類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn