【问题标题】:Call a Javascript function and return a response调用 Javascript 函数并返回响应
【发布时间】:2017-02-18 04:11:35
【问题描述】:

我最近开始使用 Javascript,我看到了这个问题,但没有对此问题的解释。我有以下 Javascript 代码:

var A = (function(){
  function Person(name){
    this.name = name;
  }

  var m = function(){
    return "Hello " + this.name;
  };

  Person.prototype.getGreeting = m;

  return Person;
})();

我必须写什么才能调用上面的代码并让它返回“Hello World”?我还在学习,请原谅我的无知。

【问题讨论】:

  • @KernelPanic 所以它将是 A("World");对吗?
  • 你的最终目标是写一个hello world程序吗?您可以在一行中做到这一点:console.log("Hello world");
  • @qxz 不,这不是我的目标。我只是想理解 javascript 中的函数,所以根据我上面的代码,它会被称为 A("World"); 对吗?
  • 我会写一个答案

标签: javascript


【解决方案1】:

此代码将Person 对象定义为A,其构造函数接受要在“问候”中打印的参数。因此,在此代码之后,您可以立即编写如下内容:

var somePerson = new A('world');
console.log(somePerson.getGreeting());

这将在名为somePerson 的变量中创建A 的实例(包装Person),并将在该实例上记录getGreeting() 的输出。

通过更一致的间距和缩进,您可以更清楚地看到结构。 Example.

【讨论】:

    【解决方案2】:

        var A=(function(){
          function Person(name){
            this.name=name;
          }
          var m=function(){
            return"Hello "+this.name;
          };
    
          Person.prototype.getGreeting=m;
    
          return Person;
        })();
    
        var B = new A();
        B.name = "World";
        console.log(B.getGreeting());

    【讨论】:

      【解决方案3】:

      您可以从简单的开始逐步构建完整的示例:

      function Person(name){
        this.name = name;
      }
      
      var m = function(){
        return "Hello " + this.name;
      };
      
      Person.prototype.getGreeting = m;
      
      var p = new Person('anybody');
      
      console.log(p.getGreeting());
      

      如果您来自另一种编程语言,一本不错的入门书籍是 Douglas Crockford 的“JavaScript: The Good Parts”。之后,一本不错的读物是 David Herman 的“Effective JavaScript”。这些将比我们在这里的任何答案更好地回答您关于代码示例的问题。

      【讨论】:

        【解决方案4】:
        new A("World").getGreeting()
        

        A 的定义创建了一个函数,然后立即调用它。该函数创建另一个名为 Person 的函数。此函数是一个 JavaScript 构造函数,可用于通过“new Person”创建一个新对象。 Person 构造函数接受一个名称参数并将其存储在内部。它还将 Person 函数原型的 getGreeting 成员设置为打印“Hello”后跟 Person 名称的函数。

        要使用,new A("World")调用构造函数A(其实就是Person),传入World,然后调用生成对象的getGreeting方法,会调用原型的getGreeting函数。

        【讨论】:

          【解决方案5】:

          您的代码使用称为Immediately-Invoked Function Expression 的惯用语,它将变量/函数Person 和m 私有/隐藏在该匿名函数的范围内。然后立即调用匿名函数,该函数设置Player 类,然后返回它。结果(Player 构造函数本身)存储在A 中。 (JavaScript 实际上没有类,但这是另一个讨论。)

          要创建此类的实例,您需要执行以下操作:

          var joe = new A("Joe");
          

          然后您可以使用joe 对象(Person/A 类的实例):

          console.log(joe.getGreeting()); // Hello Joe
          

          完整的工作示例:

          var A = (function(){
            function Person(name){
              this.name = name;
            }
          
            var m = function(){
              return "Hello " + this.name;
            };
          
            Person.prototype.getGreeting = m;
          
            return Person;
          })();
          
          var joe = new A("Joe");
          
          console.log(joe.getGreeting());

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-19
            • 2022-01-03
            • 1970-01-01
            • 2018-10-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多