匿名对象的javascript构造函数[关闭]

Posted

技术标签:

【中文标题】匿名对象的javascript构造函数[关闭]【英文标题】:javascript constructor of anonymous object [closed] 【发布时间】: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 得到了答案。 【参考方案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 - 查看我添加到答案中的其他示例。

以上是关于匿名对象的javascript构造函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的匿名函数及函数的闭包

JavaScript中的匿名函数及函数的闭包

java学习中,匿名函数构造方法构造代码块构造方法中调用构造方法(java 学习中的小记录)

javascript闭包函数

JavaScript中this的用法

C++类和对象:构造函数初始化友元匿名对象内部类