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 に答える