各関数には、プロトタイプと呼ばれるプロトタイプ属性があります。各オブジェクトにはプロトタイプもあり、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(); var a in m.__proto__){
alert(a);
}
は親クラス person とサブクラス Man を定義します。 Man オブジェクトを新規作成し、すべてのプロパティを出力します。
ECMAScript V5 は、オブジェクトのプロトタイプを取得するために、静的な getPrototypeOf メソッドを Object (Firefox/Chrome によって実装) に追加します。 Java のスーパーを模倣するために使用できます。
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(); .m1( );
man.m2();
サブクラス Man で this にぶら下がっている m1 メソッドが、親クラス person にぶら下がっているメソッド 1 を呼び出します。プロトタイプ このメソッドは、親クラスのプロトタイプでメソッド 2 を呼び出します。
上記のことから、オブジェクト プロトタイプにはそのコンストラクター プロトタイプの属性が含まれるだけでなく、コンストラクター内のこのプロトタイプの属性も含まれることがわかります。もちろん、JavaScript のコンテキスト上の理由により、親クラスのこれをサブクラスで自動的に変換することはできず、これを完了するにはある程度のスキルが必要です。
Java では次のようになります
コードをコピーします
クラス person {
プライベート文字列名;
人 (文字列名) {
this.name = name;
public void メソッド 1 () {
System.out.println(this.name);
}
}
class Man extends Person{
Man(文字列名) {
super( name);
}
public void m1() {
super.method1();
}
}
public static void main(String[ ] args) {
man man1 = new Man("ジャック")
man1.m1()
}
;