2015-07-02 3 views
2

Я попытался переопределить toString(), но я обнаружил, что переопределенная функция не вызвана вообще.Почему overriden toString() не вызывается в javascript

Я прошел через this и this, но я не могу отслеживать свою ошибку.

Моя попытка:

DIRECTION = { 
    NONE : 0, 
    DIAGONAL: 1, 
    UP: 2, 
    LEFT: 3 
}; 

var Node = function() { 
    this.direction = DIRECTION.NONE; 
    this.weight = 0; 
}; 
Node.prototype.toString = function NodeToSting(){ 
    console.log('Is called'); 
    var ret = "this.weight"; 
    return ret; 
}; 

(function driver(){ 
    var node1 = new Node(); 
    console.log(node1); 
    //findLcs("ABCBDAB", "BDCABA"); 
})(); 

Выход:

{ direction: 0, weight: 0 } 
+2

Где она должна называться? 'console.log' не будет. – elclanrs

+1

Где вызов toString? – Jonathan

ответ

6

console.log выводит буквальное значение консоли - это не будет принуждать ваш объект в строку и, следовательно, не будет выполнять вашу toString реализацию ,

Вы можете заставить его выводить строку, как это:

console.log(""+node1); 

Пример:

DIRECTION = { 
 
    NONE : 0, 
 
    DIAGONAL: 1, 
 
    UP: 2, 
 
    LEFT: 3 
 
}; 
 

 
var Node = function() { 
 
    this.direction = DIRECTION.NONE; 
 
    this.weight = 0; 
 
}; 
 
Node.prototype.toString = function NodeToSting(){ 
 
    console.log('Is called'); 
 
    var ret = "this.weight"; 
 
    return ret; 
 
}; 
 

 
(function driver(){ 
 
    var node1 = new Node(); 
 
    alert(""+node1); 
 
    //findLcs("ABCBDAB", "BDCABA"); 
 
})();

+0

@SunilD. Это правда, но я не хотел помещать 'console.log' в SO Snippet, потому что это не очевидно – CodingIntrigue