2016-05-28 10 views
0

JavaScriptの既存のDate()関数に新しいメソッドを拡張してスクリプトに追加しようとしているので、新しいメソッドが継承され、再度呼び出すことができます。JavaScript()関数にメソッドを追加する方法

Date.prototype.IsLeapYear = function() { 
    year = Date.getFullYear(); 
    return (year % 400) ? ((year % 100) ? ((year % 4) ? false : true) : false) : true; 
} 

たとえば、Date.IsLeapYearはtrueまたはfalseを返します。

+0

'Date.IsLeapYear()'のように呼びたい場合は、 'prototype'ではなく' Date'自体に置いてください。インスタンスの 'prototype'にメソッドを入れます –

+0

私は今あなたのすべての助けをありがとうございますDate.prototype.IsLeapYear = function(){ year = this.getFullYear(); リターン(年%400)? ((年%100)?((年%4)?偽:真):偽):真; }; var Today = new Date(); アラート(Today.IsLeapYear()); –

+2

プロトタイプを拡張する方法について多くのアドバイスをいただいていますが、一般的にこれは悪い考えです。古いブラウザには存在しない標準機能を "サルパッチ"している場合を除きます。短い理由:標準コミュニティがあなたとは違う「IsLeapYear」メソッドとして追加すると、事態が壊れる可能性があります。 –

答えて

0

プロトタイプを拡張して正しく実行しました。しかし、Dateプロトタイプに付属する関数を呼び出す場合は、このようにすることができます。

var leapyear = new Date() 
leapyear.IsLeapYear() 
+0

私はそれを働かせることはできません。..助けてくれてありがとう。私は、新しいメソッドを呼び出すときにミスタイプがありました。 LOLありがとうYoy –

0

ここでは非常に近いと思いますが、私はあなたのIsLeapYear機能に小さな問題があることに気付きました。 「Date.getFullYear()」を呼び出すのではなく、スコープのために「this」を使用する必要があります。注意すべき

Date.prototype.IsLeapYear = function() { 
    year = this.getFullYear(); 
    return (year % 400) ? ((year % 100) ? ((year % 4) ? false : true) : false) : true; 
}; 

var d = new Date(); 
alert(d.IsLeapYear()); 
0

ただ、いくつかのこと:

  • 日のコンストラクタ関数とDate.prototypeオブジェクト間の主な違いがあります。 javascriptのオブジェクトは、コンストラクタのプロトタイプを継承します。 Date.getFullYearは存在しません。むしろDate.prototype.getFullYearです。したがって、あなたのコードでは、日付のインスタンス(これは日付)のコンストラクタ自体ではなく、それを呼び出さなければなりません。
  • おそらくこれに気づくことはありませんが、あなたの年変数はグローバル変数になります。変数をvar(またはes6を使用する場合はconst)で宣言することを忘れないでください。

これらの小さなフィックスでは、関数は意図したとおりに動作します。

+0

"strict strict"も 'var'-less変数を捕らえています。 –

関連する問題