2010-01-13 5 views
0

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+'') 
I 출력 123

에 기대하고있어이 어떻게 올바른 방법을 할까?

답변

4

이것은 생성자를 만드는 방법이 아닙니다. 당신이 그것으로 특별한 일을하지 않는 한,뿐만 아니라

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

또한 생성자에 toString의 정의를 스틱 수 : 생성자들은 this 객체를 조작, 아무것도 반환하지 않습니다

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; 
    }; 
} 
+0

'toString'을 생성자로 이동하는 대신 다른 두 함수를 프로토 타입으로 이동하지 않는 이유는 무엇입니까? 생성자에서 함수를 선언하지 않으면 각 인스턴스 또는 그 방향으로 무언가를 복사합니까? –

+0

@Bart : 저는 JavaScript에서 생성자가 어떻게 작동하는지 보여 주려고했습니다. 실제로, 아마도'prototype' 객체에 메소드를 넣기를 원할 것입니다. –

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 + ''); 
관련 문제