「疑似古典的継承」スタイルを使用して、JS 継承に頭を悩ませようとしています。私は多くの Google 検索を行い、古典的な記事を読みました。私は Java のクラス構造に精通しており、JS のプロトタイプ スタイルを理解しようとしています。最初に基本を理解したいので、バニラJSを探しています。
単純な親子テスト クラスのセットアップがあり、スコープ ルールに関するヘルプが必要です。
1.) クラス内とクラス外でメソッドを定義するのはいつですか?
2.) プロトタイプ スタイルを使用してメソッドを作成する場合、プライベート変数とプライベート関数にアクセスするにはどうすればよいですか?
function superClass(name){
this.name = name;
var privateValue = "I'm Private";
this.outputPrivate2 = function(){
alert(privateValue); //works fine
}
}
superClass.prototype.outputPrivate = function(){
alert(this.privateValue); //outputs undefined..
alert(superClass.prototype.privateValue) //also undefined
}
3.) 子オブジェクトはどのようにしてプライベート関数を呼び出したり、親のプライベート変数にアクセスしたりできますか?
4.) 子オブジェクトが親コンストラクターを手動で呼び出す必要があるのはいつですか?
subClass2.prototype = new superClass(); // Define sub-class
subClass2.prototype.constructor = subClass2;
function subClass2(name) {
this.name = name;
this.Bye = function() {
return "Bye from subClass - " + this.name;
}
this.testm = function(){
superClass.prototype.SomeParentMethod.call(this, "arg1", "arg2");
}
}
var parent = new superClass("parent");
var child = new subClass("child1");
parent.outputPrivate(); //undefined
parent.outputPrivate2(); //I'm private
child.outputPrivate(); //undefined
child.outputPrivate2(); //I'm private
コードの 80% が複製された 3 つのオブジェクトがあったため、親オブジェクトと 3 つの子オブジェクトを作成しました。子オブジェクトには、親からのプライベート データを使用および操作するメソッドがあります。これを機能させる唯一の方法は、好きではないすべての変数を公開することです。繰り返しますが、私は Java に精通しているので、JS を Java のように機能させるのは難しいかもしれません。