Javascript 具有setter/getter的构造函数返回字符串
我刚从我的雇主那里收到一份要完成的JS快速测试,结果我迷路了。关于最后一个问题,他要求我做以下工作: 使用JavaScript,根据 例如: 注意:“==”在下面用于传达预期的输出 我说我做不到,但它是无效的,还是我完全失去了理智?它不是构造函数,因为它没有新参数。而且如果接受任何setter,它也不会返回字符串。还是我错了Javascript 具有setter/getter的构造函数返回字符串,javascript,Javascript,我刚从我的雇主那里收到一份要完成的JS快速测试,结果我迷路了。关于最后一个问题,他要求我做以下工作: 使用JavaScript,根据 例如: 注意:“==”在下面用于传达预期的输出 我说我做不到,但它是无效的,还是我完全失去了理智?它不是构造函数,因为它没有新参数。而且如果接受任何setter,它也不会返回字符串。还是我错了 请回答我的问题,因为我现在觉得自己很笨 您需要知道函数是第一类对象。这意味着与任何其他普通对象一样,它可以具有属性。知道你可以实现这样的功能。以下是一种可能的解决方案: f
请回答我的问题,因为我现在觉得自己很笨 您需要知道函数是第一类对象。这意味着与任何其他普通对象一样,它可以具有属性。知道你可以实现这样的功能。以下是一种可能的解决方案:
function chart () {
const obj = () => `Here's your ${obj.type()} chart!`
let __type = 'line'
obj.type = type => {
if (type) {
__type = type
return obj
}
return __type
}
return obj
}
var myBarChart=chart()
-chart
必须返回新函数myBarChart.type()==“line”
-返回的函数必须具有type
属性,该属性是另一个函数,它返回某种类型(line
或chart
)myBarChart.type('bar')
-当用作设置器时,将\uu type
设置为新值。让我们将其保留为局部变量\uu type
chart
返回一个函数,调用该函数时返回一个包含类型信息的字符串这里有许多概念在起作用 首先,您可以使用一个返回另一个函数的函数:
function chart() {
var fn = function() {
console.log('You are calling the anonymous function!')
};
return fn;
}
let myBarChart = chart();
myBarChart();
其次,您可以将其他字段附加到函数。(如果您来自C#或Java背景,可能会感觉不对劲,但您可以用Javascript实现这一点)
第三,javascript中有一个函数,您可以使用与getter或setter相同的函数。这是在网上讨论的
他提供的示例演示了如何使用这三个概念。这绝对是可能的。第一行
var myBarChart=chart()代码>告诉您图表
是一个函数,因此您有:
function chart ( ) {
}
function chart ( ) {
return {
type: function ( ) {
return 'line';
}
}
}
下一行myBarChart.type()
告诉您chart()
返回的值是一个具有type
属性的对象,该属性本身就是一个返回'line'
的函数。现在你有了:
function chart ( ) {
}
function chart ( ) {
return {
type: function ( ) {
return 'line';
}
}
}
下一行myBarChart.type('bar')
本身不会告诉您任何事情,但后面的一行告诉我们对.type()
的后续调用应该返回新类型,因此.type()
同时充当setter和getter(例如,类似于)。现在你有了这样的东西:
function chart ( ) {
var storedType = 'line';
return {
type: function ( newType ) {
if ( newType )
storedType = newType;
else
return storedType;
}
}
}
下一行myBarChart()
告诉我们chart
的返回值实际上需要是一个函数,而不是一个普通对象。该函数需要返回“这是您的”+storedType+“图表!”
并且它需要具有对象以前拥有的类型
属性。向函数添加属性的最简单方法是将该函数存储在变量中,然后添加属性。因此,结果是:
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;
}
下两行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行-创建一个名为chart
的空函数。完成。第二个-它返回一个名为type
的属性的对象,该属性是一个返回行
字符串的函数。完成。等等。没有什么特别的,简单的对象用法。但我明白你为什么会困惑myBarChart()
这怎么可能?嗯,函数也是对象。你们能帮我写下这个例子吗?作为回答。我将把它标记为已完成OP可以/应该至少展示他们的尝试
-好吧,OP说我说我做不到
,问题是关于构造函数、setter和getter的。。。因此,OP显然无法显示任何尝试,因为OP甚至不在正确的范围内:p@zerkms-我不反对您的观点如果对类型使用局部变量,并且不破坏返回的对象,您可以对其进行改进。准确地说,第1行和第5行的组合表明chart()
需要返回一个函数。第1行本身并不表示:p@JaromandaX更准确地说,第1行并不表示函数需要返回任何内容-PYes,你是对的,1和5表示,但这并不重要:)我知道函数被视为函数,但显然我尝试了另一种方法。真尴尬。谢谢谢谢你努力向我解释这件事。这很有帮助!一直到第三个代码示例是我的位置,但正如您所注意到的,它对我来说没有意义,所以这是一个对象。但你是对的,因为函数是JS中的一个对象,所以我完全忽略了这一点。尽管我脑子里一直想着它。我知道今天不是我的日子。非常感谢你的努力@不客气。我希望我把它分解的方式对你有帮助。
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;
}