このモードの役割は、オブジェクトのプロパティが確実にプライベート化されていることを確認することです。オブジェクトの状態には直接アクセスできず、
var person = function(cfg) {
var that = {};
that .getName = function() {
return cfg.name || 'unknown name';
};
// 性別のデフォルトは男性
that.getGender = function(); 🎜>return cfg .gender || 'male';
return that
};
var that = person(cfg);
share = {};
share.status = 'normal';
that.getFamiliarLanguage = function() {
return (cfg.langs || []).join(' ');
} ;
that.getProfile = function() {
return 'こんにちは、私の名前は ' that.getName();
that.getStatus = function() {
share .status;
that.setStatus = function(status) {
return that; 🎜>var me =programmer({
名前: 'AndyZhang',
性別: '男性',
// 使い慣れた言語
langs: ['javascript', 'java', ' php']
});
console.debug(me.getFamiliarLanguage());
console.debug(me.getProfile()); ああ、本当に忙しい。 ');
console.debug(me.getStatus());
コードからわかるように、プログラマ メソッドを呼び出すときは、new を使用しません。
this.name = cfg.name のような属性割り当てコードがあり、それを new で呼び出す (メソッドを呼び出すコンストラクター) 場合、生成されたオブジェクトの name 属性はなくなります。例:
コードをコピーします
コードは次のとおりです:
//ここでのメソッド名の最初の文字は、 new Call
var Person = function(cfg) {
this.name = cfg.name;
上記の例から、person1 の属性に直接アクセスできることがわかりますが、それらは真にプライベートではないことがわかります。場合によっては、それを示すためにコード仕様または規則を使用することがあります。たとえば、プロパティがプライベートであることを表すには、 this._name のように記述します。これは、サードパーティの JS ライブラリで統一されている限り、良い方法だと思います。 、このメソッドは、YUI2 のように、より頻繁に使用される可能性があります。
引き続き最初のコードを見てください。これは使用されていませんが、プログラマーのメソッドから、呼び出し後のその役割がわかります。 、その人がすでに持っているメソッド getName と getGender を返し、それに基づいてプログラマの Share メソッドを上書きすることもできます。 JavaScript のスコープとクロージャ メカニズムを通じて、コード内の that.getStatus メソッドや that.setStatus メソッドなど、いくつかのプライベート変数とメソッドを一元化して処理し、呼び出すことができます。 。