toString无法正常工作?

时间:2010-01-13 06:50:45

标签: javascript tostring

function dTree() {
    return {
        init : function(data) {
            this.data = data;
        },
        node : function(i){
            return '' + i;
        }
    }
};
dTree.prototype.toString = function() {
    var str = '';
    for(var i = 0; i < this.data.length; i++)
    {
        str += this.node(this.data[i]);
    };
    return str;
}
dTree1 = new dTree();
dTree1.init([1,2,3]);
alert(dTree1+'')

我希望它输出123

如何正确地做到这一点?

2 个答案:

答案 0 :(得分:4)

这不是你如何构建构造函数。构造函数不返回任何内容,它们操纵this对象:

function dTree() {
    this.init = function(data) {
        this.data = data;
    };
    this.node = function(i){
        return '' + i;
    };
}

你也可以将toString的定义粘贴到构造函数中,除非你正在做一些特别的事情:

function dTree() {
    this.init = function(data) {
        this.data = data;
    };
    this.node = function(i) {
        return '' + i;
    };
    this.toString = function() {
        var str = '';
        for(var i = 0; i < this.data.length; i++)
        {
            str += this.node(this.data[i]);
        };
        return str;
    };
}

答案 1 :(得分:2)

您正在从构造函数返回一个普通的新对象,构造函数中的this对象根本就没有被使用,并且该对象是分配了正确的原型对象的对象。

function dTree() {
  this.init = function(data) {
    this.data = data;
  };
  this.node = function(i){
    return '' + i;
  };
}

dTree.prototype.toString = function() {
  var str = '';
  for(var i = 0; i < this.data.length; i++)    {
      str += this.node(this.data[i]);
  };
  return str;
};

dTree1 = new dTree();
dTree1.init([1,2,3]);
alert(dTree1 + '');