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;
}
}