如何在javascript中配置函数实例?

如何在javascript中配置函数实例?,javascript,json,Javascript,Json,如果我有这个密码 var node = function(n) { var name = n; var children = []; var finished = false; var failed = false; this.getName = function() { return name }; this.downloadData = function(obj) { }; this.getChi

如果我有这个密码

var node = function(n) {

    var name = n;
    var children = [];
    var finished = false;
    var failed = false;

    this.getName = function() {
        return name
    };
    this.downloadData = function(obj) {

    };

    this.getChildren = function() {
        return children;
    };
    this.setChildren = function(c) {
        Array.prototype.push.apply(children, c);
    };
    this.isFinished = function() {
        return finished;
    };
    this.setFinished = function() {
        finished = true;
    }
    this.isFailed = function() {
        return failed;
    }
    this.setFailed = function() {
        failed = true;
    }
};
如何将其转换为以下对象:

var a = new node("a");
var j = JSON.stringify(a);
结果

{"name":"a","children":[],"finished":false,"failed":false}
谢谢

您需要对象属性而不是变量

因此,不要声明
var name=n
,您将声明
this.name=n。这会让它看起来像

var node = function(n) {
    this.name = n;
    this.children = [];
    this.finished = false;
    this.failed = false;
    ///other functions here
}

这可以通过实现
toJSON
函数来实现

如果正在字符串化的对象具有名为toJSON的属性,其值为 是一个函数,则toJSON()方法自定义JSON 字符串化行为:不是序列化对象,而是 调用toJSON()方法时返回的值将被序列化。

例如:


幸运的是,这是不可能的。我认为题目选得不好。听起来像是要将函数转换为字符串,似乎要将通过
new…
创建的对象转换为JSON。仅供参考,对象来自何处并不重要。这会将变量的访问修饰符从私有/本地更改为公共。可能不是OP想要的,他/她为他们创建了get/set。啊,这是一个有趣的观点。在这种情况下,您的解决方案肯定是可行的。如果最终结果是一个平面JSON对象,我想知道为什么需要getter/setter。稍后解析JSON字符串时,您无法使用它们。但是您如何调用“children”?这取决于children是什么,您的问题只表明它是一个数组。children可以包含更多节点。
var node = function(n) {

  var name = n;
  var children = [];
  var finished = false;
  var failed = false;

  this.toJson = function toJson() {
    return {"name":name ... };
  } 

 }