JavaScript実装クラスの様々な方法例

2238 ワード

作成方法
 
  
function coder()
{
    this.name = ' ';
    this.job = 'Web ';
    this.coding = function ()
    { alert(' '); }
}

var coder = new coder();
alert(coder.name);
coder.coding();

工場の仕様
 
  
function createCoderFactory()
{
    var obj = new Object();
    obj.name = ' ';
    obj.job = ' ';
    obj.coding = function ()
    {
        alert(' ');
    };
    return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();
工場の方法と構造方法は同じ欠点を持っています.つまり、一例を作るごとに、このクラスの各関数を具体化します.
原型チェーン
 
  
function coder(){}
coder.prototype.name = ' ';
coder.prototype.job = ' ';
coder.prototype.coding = function(){
    alert(' ');
};
var coder = new coder();
alert(coder.name);
coder.coding();
プロトタイプチェーンには、すべての属性が共有されています.例が変われば、他のものは変化します.例えば:
 
  
var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name);     /* */
coder2.name = 'nowamagic';
alert(coder1.name);     /* nowamagic*/
alert(coder2.name);     /* nowamagic*/
ハイブリッド方式
以上の三つはそれぞれの欠点を持っていますので、改善します.
 
  
function coder()
{
    this.name = ' ';
    this.job = ' ';
}
coder.prototype.coding = function(){
    alert(' ');
};
ダイナミックチェーン
前の三つの欠点を解決するには、もう一つの方法があります.
 
  
function coder()
{
    this.name = ' ';
    this.job = ' ';
    if (typeof(coder._init) == 'undefined')
    {
        this.coding = function ()
        {
            alert(' ');
        };
        this._init = true;
    }
}