JavaScript:the Good Parts_JavaScript Tips から抜粋した関数継承パターン

WBOY
リリース: 2016-05-16 18:05:51
オリジナル
874 人が閲覧しました

このモードの役割は、オブジェクトのプロパティが確実にプライベート化されていることを確認することです。オブジェクトの状態には直接アクセスできず、

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;
this.gender = cfg を使用するコンストラクターであることを示すために大文字になっています。性別; } // 新しい人 1 var person1 = 新しい人({ 名前: 'アンドリュー', 性別: '男性' }); / 当初、名前と性別を非公開にして、javaBean と同じように読み取りと書き込みを行いたかったのです。 'male'

上記の例から、person1 の属性に直接アクセスできることがわかりますが、それらは真にプライベートではないことがわかります。場合によっては、それを示すためにコード仕様または規則を使用することがあります。たとえば、プロパティがプライベートであることを表すには、 this._name のように記述します。これは、サードパーティの JS ライブラリで統一されている限り、良い方法だと思います。 、このメソッドは、YUI2 のように、より頻繁に使用される可能性があります。
引き続き最初のコードを見てください。これは使用されていませんが、プログラマーのメソッドから、呼び出し後のその役割がわかります。 、その人がすでに持っているメソッド getName と getGender を返し、それに基づいてプログラマの Share メソッドを上書きすることもできます。 JavaScript のスコープとクロージャ メカニズムを通じて、コード内の that.getStatus メソッドや that.setStatus メソッドなど、いくつかのプライベート変数とメソッドを一元化して処理し、呼び出すことができます。 。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート