2016-06-30 12 views
0

重複としてマークしないでください。私は多くを検索しましたが、そのような質問はここにありません。同様のものがありますが、同じではありません。Date.prototype.xyz関数をオーバーライドします。

私はこれを解決するために試してみましたが、最後に私はここでそれを聞いてみるべきだと思いました。パラメータパラメータ付き

> new Date().toLocaleString()

"6/30/2016, 11:33:19 PM"

なし

"zh-Hans-CN"はちょうど質問のために、任意の有効な値を持つことができます。

> new Date().toLocaleString("zh-Hans-CN")

"2016/6/30 下午11:33:48"

私は実際にそれが第二の場合のようになく、任意の入力引数なしで出力を返すべきである、というような方法でこの機能の動作を変更したいです。 like

> new Date().toLocaleString()

"2016/6/30 下午11:33:48"

考え方は、何とかその関数をオーバーライドして、既存の関数をparamでオーバーライドする関数から呼び出します。

Date.prototype.toLocaleString = function() { 
    return this.toLocalString("zh-Hans-CN"); 
} 

よう

しかし、この関数は無限recurrsionケーシングにこのエラーの原因となって、自分自身を呼び出しているので、それは間違っています。

Uncaught RangeError: Maximum call stack size exceeded(…)

これは一例ですが、同じプロトタイプ関数を使用してこの機能をオーバーライドする方法が問題です。たぶん、実際の関数を最初に切り離して、それを上書きする方法があります。あなたの助けが最も高く評価されます。

答えて

1

匿名関数を使用してDate.prototype.toLocaleStringを参照として保存し、その関数コンテキストにバインドするreferenceを返す関数を返すことができます。素晴らしいです

Date.prototype.toLocaleString = (function (ref) { 
 
    return function(){ 
 
    return ref.bind(this)('zh-Hans-CN'); 
 
    } 
 

 
})(Date.prototype.toLocaleString)

+0

。それはあなたがいくつかの光を投げることができればそれは素晴らしいでしょう、それは働いている。私はあなたがすでに説明したが、改善できるかどうかは知っている。どうもありがとう –

関連する問題