【问题标题】:javascript constructor of anonymous object [closed]匿名对象的javascript构造函数[关闭]
【发布时间】:2014-02-20 14:08:11
【问题描述】:

从 PHP 迁移到 NodeJS (JavaScript) 后,我在使用 JavaScript 的匿名对象时遇到了一些问题 - 我不知道如何像在 PHP 中使用 __construct() 函数或Python 的__init__(self) 函数。也许像 Java [Link] JavaScript 不能有匿名构造函数...

解决方案:

在阅读了 cmets 和其他答案后,我发现通过使用返回对象的匿名函数可以获得此功能:

var a = new function() {
  var constTxt = [not constructed]';

  /* emulating a constructor */
  if (true) {
     constTxt = '[constructed]';
  }

  return {
    functionABC : function() {
      return 'abc ' +  constTxt;
    },
    functionDCF : function() {
      return 'other function';
    }
  };
}; 

【问题讨论】:

  • 仍然不明白你想要完成什么。您刚刚展示了一些令人费解的代码作为示例,但如果您真的需要帮助,您应该描述您实际尝试完成的内容。
  • 你能写出你想写的使用a的代码是什么样子的吗?你期望的结果是什么?我不知道你想在什么上使用构造函数。
  • 我将代码更改为,我的想法,表达我想做的更多?
  • @wa 请不要在问题本身中包含您的解决方案。相反,将其作为答案发布。
  • 这个问题可以关闭,因为 OP 从 cmets 得到了答案。

标签: javascript node.js sails.js


【解决方案1】:

我真的不知道你想做什么,但在 javascript 中,任何函数都可以用作构造函数。 函数是构造函数的事实取决于调用函数的方式,如果在函数之前使用“new”调用,函数将表现为构造函数。

另外,请注意“this”,它指的是函数的“上下文”一个对象(或严格模式下的任何值),并由函数的调用方式设置或使用绑定。如果函数被调用为构造函数,则它是新创建的对象,但仅在这种情况下

【讨论】:

  • 我确实了解到这一点并同意它 - 请参阅下面我提出的解决方案,因为它使用这个很酷的 JavaScript 独特功能回答了我的问题。
【解决方案2】:

您将它声明为一个函数,当您使用new module.exports() 实例化它时,该函数将成为构造函数。这些方法然后像这样在函数原型上进行:

module.exports = function(arg) {...};

module.exports.prototype = {
    functionABC: function() {return 'abc'},
    functionDEF: function() {return 'def'}
}

var myExports = new module.exports();

myExports.functionABC("hello");

我不确定您对问题的anonymous 部分提出的问题。对象的名字是构造函数所以这里没有匿名对象。


或者,如果你想从构造函数中调用一个方法,你可以这样做:

module.exports = function(arg) {
    // put whatever code you want in the constructor
    if (arg) {
        this.functionABC();
    } else {
        this.functionDEF();
    }
};

module.exports.prototype = {
    functionABC: function() {return 'abc'},
    functionDEF: function() {console.log('def');}
}

var myExports = new module.exports(true);   // will execute the constructor

【讨论】:

  • functionABC 被调用时,我看不出这是如何调用functionDEF 的?它是匿名的,因为除了 module.exports 之外没有其他对象分配?
  • 调用functionABC时不调用functionDEF。这是两种不同的方法。您可以拨打任何您想要的电话。如果您希望在调用 functionABC 时调用 functionDEF,则将 this.functionDEF() 放入 functionABC() 的代码中。
  • 对,但那不是构造函数?它应该自动调用functionDEF,即__construct()?
  • 构造函数就是这个函数:module.exports = function(arg) {...};。您在大括号之间的构造函数中填写您想要的任何功能。我不知道你想要什么,所以我把它留给你填写。如果你想在构造函数中调用一个方法,你可以像this.functionDEF()一样。
  • @Wallter - 查看我添加到答案中的其他示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多