2011-02-08 3 views
1

私は、Dateオブジェクトに対して約8つのプロトタイプ関数を持っています。私はDate.prototypeを繰り返さないようにしたいと思います。 1つのオブジェクトに対して複数のプロトタイプ関数を作成する統合された方法はありますか? 1つのオブジェクトに対して複数のプロトタイプ関数を作成する統合された方法はありますか?

は私が無駄にこれを試してみました:

Date.prototype = { 
    getMonthText: function(date){ 
    var month = this.getMonth(); 
    if(month==12) month = 0; 
    return ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'][month]; 
    }, 
    getDaysInMonth: function(date){ 
    return 32 - new Date(this.getFullYear(), this.getMonth(), 32).getDate(); 
    } 
}; 

答えて

2

あなたがやっている方法は、あなたの新しいオブジェクトとプロトタイプを置き換えます。

あなたはjQueryのを使用している場合、それはあなたが使用していけない場合、あなたは簡単に関数のように拡張し作成することができ$.extend(Date.prototype, { getMonthText: function(date){...}, getDaysInMonth: function(date){...} })

のように使用することができます$ .extend方法があります。

function extend(proto,newFunctions) { 
    for (var key in newFunctions) 
     proto[key] = newFunctions[key] 
} 

、コールを:

extend(Date.prototype,{ getMonthText: function(date){...}, getDaysInMonth: function(date){...} }); 

もう一つの方法は、ただ直接それを行うです:

Date.prototype.getDaysInMonth = function(date){ ... } 
Date.prototype.getMonthText = function(date){ ... } 

私はこれが拡張機能よりも読みやすいと主張したいと思います。

+0

これは実行時に効率が悪いと判断します。本当? –

+0

はい、拡張機能の使用は効率が悪いはずですが、一度だけ実行され、時間は無視できます。人々は「時期尚早の最適化はすべての悪の根源だ」と言う。あなたはどれが読みやすいかを選ぶことができます。 – Felipe

+0

私はあなたに同意します。Date.prototype.x = function()は読みやすくなります。 –

関連する問題