每個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); 
} 
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(); 
以上可以看出對象原型不但包括其構造器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(); 
    } 
}
新聞熱點
疑難解答
圖片精選