【问题标题】:JavaScript constructor whose instances are functions实例为函数的 JavaScript 构造函数
【发布时间】:2015-10-01 03:07:15
【问题描述】:

我知道这可能是一个奇怪的问题,可能没有实际应用,但是否有可能创建一个 JavaScript 类来构造像函数一样的实例?这就是我的意思:

function Factory() {}

// this may not be necessary, but I'll include it for sake of clarification
Factory.prototype = Object.create(Function.prototype);

var method = new Factory();

method(); // Objective: should not throw TypeError

进一步明确目标:

  • method 应该可以作为函数调用
  • method 应该是调用构造函数的结果(例如 var method = new Factory() 在这种情况下)
  • 构造函数不能是Function

【问题讨论】:

  • 您要解决什么问题?您发布了一些带有未知应用程序的代码。我们有零上下文来评估它或知道还有什么建议。此外,您的问题也很难说清楚。
  • @jfriend00 这只是一个基本上没有上下文的挑战。我只是好奇是否有可能在 JavaScript 中实现这一点,我认为这个问题的答案可能会揭示各种 JavaScript 构造的一些有用的利基,从而使这样的行为成为可能。
  • 那么,“有没有可能”,你的意思是说它不会产生错误吗?你还没有描述你想要的输出是什么,所以很难评估一个未知的结果是否可能。抱歉,当根本没有描述“它”时,我不知道如何回答“有可能”这个问题。事实上,现在我什至不知道问题是什么。
  • @jfriend00 本质上,目标是使method 能够作为函数调用,并作为调用不是Function 的构造函数的结果。

标签: javascript function constructor challenge-response


【解决方案1】:

如果我理解正确的话。对象构造函数需要返回他的方法。然后你可以像你描述的那样称呼它。

function Factory() {
    return this.method;
}

Factory.prototype.method = function() {
    console.log('from method');
};

var method = new Factory();

method();

http://jsfiddle.net/ydcoL3c2/

【讨论】:

  • 等等,你可以从构造函数返回一个值吗?我不知道这是可能的。
  • 是的,您可以退回任何您需要的东西。基本上它仍然是功能。
  • 我认为如果您将任何函数作为构造函数调用(即使用new 关键字),则该函数不允许返回值,否则会引发错误。我很惊讶这是允许的。
  • @PatrickRoberts - 如果您从使用new 调用的构造函数返回某些内容,则不会返回通过new 创建的对象,并且如果未在构造函数中的其他位置分配,则将只是垃圾收集。
  • 好吧,我想我学到了一些新东西。感谢您的洞察力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2013-03-05
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多