返回可用作函数的 Javascript 对象
Returning a Javascript object that can be used as a function
我遇到了一个编码 "test",它要求代码执行以下操作:
使用JavaScript,根据例子实现一个'chart'函数:
注意:下面使用“===”来传达预期输出。
var myBarChart = chart();
myBarChart.type() === 'line';
myBarChart.type('bar');
myBarChart.type() === 'bar';
myBarChart() === "Here's your bar chart!"; // THIS IS WHAT I CAN'T DO
var myScatterChart = chart().type('scatter');
myScatterChart() === "Here's your scatter chart!"; // THIS EITHER
chart() 对象和type() 方法的实现相对简单。我得到了所有预期的结果。然而,我无法想出的是一种将 myBarChart() 和 myScatterChart() 转换为 return 字符串的方法。
我可以重写对象的 toString() 方法,这样像下面这样的东西就可以工作了:
console.log(myBarChart + ''); // 'bar'
但没有得到任何适用于这种形式的东西:
console.log(myBarChart()); // Looking for 'bar', but never got there
基本上,我永远无法得到 whatever() 到 return 一个字符串,而 whatever.type() 是一个有效的方法。
有没有我不知道的方法可以做到这一点?
要创建一个同时充当对象的函数,您可以这样做:
var Example = function(params){
this.params = params;
}
Example.prototype.prompt = function(){
console.log(this.params);
}
var test = new Example("Hello, how are you?");
test.prompt();
现在,如果您要问如何创建一个函数,每次调用它时都会启动一个新的 ovject,您可以这样实现:
var Example = function(params){
this.params = params;
}
Example.prototype.prompt = function(){
console.log(this.params);
return this;
}
Example.prototype.change = function(data){
this.params = data;
return this;
}
myInit = function(data){
return new Example(data);
}
myInit("Hello!").prompt().change("How are you?").prompt();
在你的例子中,你想为初始化函数创建一个变量,所以你会做这样的事情:
var test = myInit("Default param.");
test.prompt();
test.change("Hello!");
test.prompt();
让我们先了解一下需求。
您需要创建一个 Chart
函数,该函数可以 return 具有 属性 type
的函数可以用作setter 或 getter.
type
函数,当不带参数调用时,应该 return 实际类型。
默认类型应该是line
.
type
函数在使用一个参数调用时,它应该设置图表的实际 type
并且它应该 return 一个这样的函数,您可以再次调用它以获取 Here's your chart..
消息。
好的。现在,让我们看看如何用代码编写它。
function Chart() {
// Default type. Req 3
var type = 'line';
// Core function
var func = function() {
return "Here's your " + type + " chart!";
};
// Req 1
func.type = function(value) {
// Req 2
if (arguments.length === 0) {
return type;
}
// Req 4
type = value;
return func;
}
// Req 1
return func;
}
测试用例:
var myBarChart = Chart();
console.assert(myBarChart.type() === 'line');
myBarChart.type('bar');
console.assert(myBarChart.type() === 'bar');
console.assert(myBarChart() === "Here's your bar chart!");
var myScatterChart = Chart().type('scatter');
console.assert(myScatterChart() === "Here's your scatter chart!");
我遇到了一个编码 "test",它要求代码执行以下操作:
使用JavaScript,根据例子实现一个'chart'函数:
注意:下面使用“===”来传达预期输出。
var myBarChart = chart();
myBarChart.type() === 'line';
myBarChart.type('bar');
myBarChart.type() === 'bar';
myBarChart() === "Here's your bar chart!"; // THIS IS WHAT I CAN'T DO
var myScatterChart = chart().type('scatter');
myScatterChart() === "Here's your scatter chart!"; // THIS EITHER
chart() 对象和type() 方法的实现相对简单。我得到了所有预期的结果。然而,我无法想出的是一种将 myBarChart() 和 myScatterChart() 转换为 return 字符串的方法。
我可以重写对象的 toString() 方法,这样像下面这样的东西就可以工作了:
console.log(myBarChart + ''); // 'bar'
但没有得到任何适用于这种形式的东西:
console.log(myBarChart()); // Looking for 'bar', but never got there
基本上,我永远无法得到 whatever() 到 return 一个字符串,而 whatever.type() 是一个有效的方法。
有没有我不知道的方法可以做到这一点?
要创建一个同时充当对象的函数,您可以这样做:
var Example = function(params){
this.params = params;
}
Example.prototype.prompt = function(){
console.log(this.params);
}
var test = new Example("Hello, how are you?");
test.prompt();
现在,如果您要问如何创建一个函数,每次调用它时都会启动一个新的 ovject,您可以这样实现:
var Example = function(params){
this.params = params;
}
Example.prototype.prompt = function(){
console.log(this.params);
return this;
}
Example.prototype.change = function(data){
this.params = data;
return this;
}
myInit = function(data){
return new Example(data);
}
myInit("Hello!").prompt().change("How are you?").prompt();
在你的例子中,你想为初始化函数创建一个变量,所以你会做这样的事情:
var test = myInit("Default param.");
test.prompt();
test.change("Hello!");
test.prompt();
让我们先了解一下需求。
您需要创建一个
Chart
函数,该函数可以 return 具有 属性type
的函数可以用作setter 或 getter.type
函数,当不带参数调用时,应该 return 实际类型。默认类型应该是
line
.type
函数在使用一个参数调用时,它应该设置图表的实际type
并且它应该 return 一个这样的函数,您可以再次调用它以获取Here's your chart..
消息。
好的。现在,让我们看看如何用代码编写它。
function Chart() {
// Default type. Req 3
var type = 'line';
// Core function
var func = function() {
return "Here's your " + type + " chart!";
};
// Req 1
func.type = function(value) {
// Req 2
if (arguments.length === 0) {
return type;
}
// Req 4
type = value;
return func;
}
// Req 1
return func;
}
测试用例:
var myBarChart = Chart();
console.assert(myBarChart.type() === 'line');
myBarChart.type('bar');
console.assert(myBarChart.type() === 'bar');
console.assert(myBarChart() === "Here's your bar chart!");
var myScatterChart = Chart().type('scatter');
console.assert(myScatterChart() === "Here's your scatter chart!");