間違いなく可能です。最初の行var myBarChart = chart();
はchart
が関数であるので、あなたが持っていることを示しています:
function chart () {
}
次の行myBarChart.type()
がchart()
によって返された値が'line'
を返す関数そのものですtype
プロパティを持つオブジェクトであることを示しています。だから今あなたが持っている:
function chart () {
return {
type: function () {
return 'line';
}
}
}
を次の行myBarChart.type('bar');
はあなたに自分自身では何も教えてくれませんが、それ以降の行は.type()
への後続の呼び出しは、新しい型を返す必要があることを教えてくれるので、.type()
は両方として機能していますセッターとゲッター(例えば、jQuery's valに類似)。
function chart () {
var storedType = 'line';
return {
type: function (newType) {
if (newType)
storedType = newType;
else
return storedType;
}
}
}
myBarChart()
がchart
の戻り値は実際には関数ではなく、プレーンなオブジェクトであるために必要なことを教えてくれる、次の行:だから今のようなものを持っています。その関数は'Here\'s your ' + storedType + ' chart!'
を返す必要があり、オブジェクトが以前持っていたプロパティtype
を持つ必要があります。関数にプロパティを追加する最も簡単な方法は、その関数を変数に格納してプロパティを追加することです。だから、結果は次のとおりです。
function chart () {
var storedType = 'line';
var func = function () {
return 'Here\'s your ' + storedType + ' chart!';
};
func.type = function (newType) {
if (newType)
storedType = newType;
else
return storedType;
}
return func;
}
次の2行var myScatterChart = chart().type('scatter');
が.type
が引数で呼び出されたときchart()
を呼び出すことによって返されたとして、それは同じ機能を返すべきであることを示しています。それが答えを完了するために、func
またはthis
を返すのいずれかによって行うことができます。
function chart () {
var storedType = 'line';
var func = function () {
return 'Here\'s your ' + storedType + ' chart!';
};
func.type = function (newType) {
if (newType) {
storedType = newType;
return func;
} else
return storedType;
}
return func;
}
だから、正確にあなたの質問は何ですか?一度に1つずつ、ラインごとに要件を満たすだけです。 1行目 - 'chart'という名前の空の関数を作成します。完了しました。 2nd - 'line'文字列を返す関数である' type'という名前のプロパティを持つオブジェクトを返します。完了しました。等 – zerkms
特別なことは何もない、単純なオブジェクトの使用。しかし、なぜ私はあなたが 'myBarChart()'を困惑させたのか分かりますが、それはどのように可能ですか?まあ、関数もオブジェクトです。 – dfsq
あなたは私のためにこの例を書いてもらえますか?答えとして。私は完了としてそれをマークします – patrykcieszkowski