Где toString не работает? - PullRequest
       292

Где toString не работает?

0 голосов
/ 13 января 2010
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 ]

4 голосов
/ 13 января 2010

Это не то, как вы делаете конструкторы. Конструкторы ничего не возвращают, они манипулируют объектом this:

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

Вы также можете вставить определение toString в конструктор, если только вы не делаете с ним что-то особенное:

* +1007 *
2 голосов
/ 13 января 2010

Вы возвращаете простой новый объект из вашего конструктора, объект 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 + '');
...