Javascript 具有setter/getter的构造函数返回字符串

Javascript 具有setter/getter的构造函数返回字符串,javascript,Javascript,我刚从我的雇主那里收到一份要完成的JS快速测试,结果我迷路了。关于最后一个问题,他要求我做以下工作: 使用JavaScript,根据 例如: 注意:“==”在下面用于传达预期的输出 我说我做不到,但它是无效的,还是我完全失去了理智?它不是构造函数,因为它没有新参数。而且如果接受任何setter,它也不会返回字符串。还是我错了 请回答我的问题,因为我现在觉得自己很笨 您需要知道函数是第一类对象。这意味着与任何其他普通对象一样,它可以具有属性。知道你可以实现这样的功能。以下是一种可能的解决方案: f

我刚从我的雇主那里收到一份要完成的JS快速测试,结果我迷路了。关于最后一个问题,他要求我做以下工作:

使用JavaScript,根据 例如:

注意:“==”在下面用于传达预期的输出

我说我做不到,但它是无效的,还是我完全失去了理智?它不是构造函数,因为它没有新参数。而且如果接受任何setter,它也不会返回字符串。还是我错了


请回答我的问题,因为我现在觉得自己很笨

您需要知道函数是第一类对象。这意味着与任何其他普通对象一样,它可以具有属性。知道你可以实现这样的功能。以下是一种可能的解决方案:

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;
    }