2017-05-12 16 views
0

我最近從Java後端更改爲JS前端。我們使用類似對象結構的主幹(至少這是我的同事告訴我的),我想知道是否有方法來覆蓋toString()(例如應該從console.log調用)。將toString添加到骨幹模型對象

這是我們的模型是什麼樣子

// namespace 
 
var De = {}; 
 
De.Ppasler = {}; 
 

 
De.Ppasler.Model = (function() { 
 

 
/** @constructor */ 
 
function Model(param) { 
 
    var self = this; 
 

 
    self.public = function() { 
 
    // do sth public 
 
    console.log("public", private()); 
 
    }; 
 

 
    function private() { 
 
    // do sth private 
 
    return "private"; 
 
    } 
 
    
 
    // this is what I would have done in Java 
 
    self.toString = function() { 
 
    return "[object Model]"; 
 
    } 
 
} 
 

 
return Model; 
 
}()); 
 

 
var model = new De.Ppasler.Model(); 
 
model.public(); 
 
console.log(model);

添加toString型號不起作用。

我也試過this one

Model.prototype.toStringself.prototype.toString但是這會導致錯誤

我不能確保model定義,我想避免undefined -check,直接調用toString前爲了登錄目的。

+1

請參閱:http://stackoverflow.com/q/36215379/2333214。 'console.log'不是標準的一部分。你最好重寫'console.log' /編寫你自己的日誌函數來調用'toString' /你定義的具體方法 –

+0

感謝提示,我會猜測100%'console.log'是一個標準函數...我被寵壞了Java我猜:) – ppasler

+0

這真的看起來像[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你想在這裏做什麼? –

回答

1

大多數瀏覽器工具都提供智能console.log,可讓您直接瀏覽對象,因此無需重寫toString

console.log demo with class

即使你會覆蓋在對象上toString,大多數瀏覽器實現的console.log不叫上傳遞的對象toString

類似alert會做你想做的事。