匿名对象的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构造函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章