私は以前、JavaScript でクラスを記述する方法について説明しました。ただし、プライベート実装については議論されていません。この記事を読んでください。
JS におけるプライベート プロパティの実装の本質は var クロージャであることを知っています。次のように
function Person(n, a ){
// パブリック
this.name = n;
// プライベート
var age = a;
this.getName = function(){
return this.name;
}
this.getAge = function(){
return age;
}
}
テストは次のとおりです。年齢は非公開であり、年齢は非公開です。ドット演算子を使用して取得され、getName メソッドのみが使用可能です。
var p = new Person('jack' ,23) ;
console.log(p.age); // 未定義
console.log(p.getAge()); // 23
上記、以下で使用して実装するツール機能です。
/**
* @param {String} className
* @param {Function} classImp
*/
function $class(className, classImp){
function clazz(){
if(typeof this.init == "function"){
this.init.apply(this, argument); 🎜> }
}
classImp.call(clazz.prototype);
window[className] = clazz;
}
クラスを作成します
$class('person', function(){
// プライベート属性はここで定義されます
var age = '';
this.init = function(n, a){
// すべてのプロパティは this にハングされ、初期化されます
this.name = n;
// プライベート プロパティの初期化
age =
};
return this.name }; .getAge = function( ){
>
コードは次のとおりです。
var p = new person('jack ',23);
コンソール.log(p.name); // Jack は共有できます。ドット演算子を使用して
console.log(p.age) を取得します。 // 未定義のプライベートはドット演算子では取得できません
console.log(p) .getAge()); // 23 プライベート年齢は共通メソッド getAge を通じてのみ取得できます