JavaScriptサブクラスはObject.get ProttypeOfで親メソッド解析を呼び出します.

2288 ワード

各functionにはプロトタイプの属性があり、プロトタイプと呼ばれています.各オブジェクトにもプロトタイプがあります.Firefox/Safari/Chrome/Operaには、_u_を通すことができます.プロト.アクセスするために、IE 6/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 1つのManのオブジェクトが、すべての属性を印刷します.
ECMAScript V 5は、オブジェクトの原型を取得するために、Objectに静的なget ProttypeOf方法を追加します.それを使って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にかけるm 1方法では、親タイプPersonのthisにかけるmethod 1を呼び出し、prototypeにかけるm 2方法で親タイププロトタイプのmethod 2を呼び出します.
以上からオブジェクトプロトタイプには、そのコンストラクタプロトタイプの属性だけでなく、コンストラクタの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();
    }
}