0
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

如何以正确的方式做到这一点?

4

2 回答 2

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;
    };
}
于 2010-01-13T06:52:35.570 回答
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 + '');
于 2010-01-13T06:53:27.127 回答