JavaScript でクラスを作成する方法については以前に説明しました。ただし、プライベート実装については議論されていません。この記事を読んでください。
JS におけるプライベート プロパティの実装の本質は var + Closure であることがわかっています。次のように
次のようにコードをコピーします。
関数担当者(n、a){
// 公共
this.name = n;
// プライベート
var age = a;
this.getName = function(){
this.name を返します。
}
this.getAge = function(){
戻り年齢;
}
}
テストは次のとおりです。年齢はプライベートであり、ドット演算子を使用して取得することはできません。代わりに getName メソッドを使用することのみが可能です。
次のようにコードをコピーします。
var p = 新しい人('ジャック',23);
console.log(p.age); // 未定義
console.log(p.getAge()); // 23
上記については何も驚くべきことではありません。以下ではツール関数を使用して実装してみましょう。
次のようにコードをコピーします。
/**
* @param {文字列} クラス名
* @param {関数} classImp
*/
関数 $class(className, classImp){
functionclazz(){
if(this.init のタイプ == "関数"){
this.init.apply(this, 引数);
}
}
classImp.call(clazz.prototype);
ウィンドウ[クラス名] = clazz;
}
クラスを書く
次のようにコードをコピーします。
$class('人', function(){
// プライベートプロパティはここで定義されます
var age = '';
this.init = function(n, a){
//共有プロパティはこれにハングして初期化されます。
this.name = n;
// プライベートプロパティの初期化
年齢 = a;
};
this.getName = function(){
this.name を返します。
};
this.getAge = function(){
年齢を返す。
}
});
新しいインスタンスオブジェクト
次のようにコードをコピーします。
var p = 新しい人('ジャック',23);
console.log(p.name); // jack と共通で、ドット演算子を使用して取得できます。
console.log(p.age); // 未定義のプライベートはドット演算子では取得できません
console.log(p.getAge()); // 23 プライベート年齢はパブリック メソッド getAge を通じてのみ取得できます。