這次帶給大家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中文網其他相關文章!