2017-02-18 67 views
0

是否可以創建一個對象以便返回人類可讀字符串?js:返回人類可讀字符串的對象

function hsl_obj(h, s, l) { 
    this.h = h; 
    this.s = s; 
    this.l = l; 
    this.__str__ = function() { 
     return "hsl(" + this.h + ", " + this.s + "%, " + this.l + ")"; 
    } 
} 

var badass = new hsl_obj(76, 64, 59); // #BADA55 
console.log(badass); // --> hsl(76, 64%, 59%) 
console.log(badass.h); // --> 76 
console.log(badass.s); // --> 64 
console.log(badass.l); // --> 59 

$("p").css("background-color", badass); 
$("#ph").html(badass.h); 
$("#ps").html(badass.d); 
$("#pl").html(badass.l); 

我知道,我可以改變__str__toString,只使用badass.toString()代替,但我想知道,如果這個方法是可行的。這將有點像python中的__str__方法。

編輯

現在,當我打電話badass,它返回hsl_obj {h: 76, s: 64, l: 59}

+3

也許'JSON.stringify(obj);'? – mrlew

+0

由於問題有點奇怪:) – Janne

+0

什麼時候應該返回字符串? – guest271314

回答

0

你想PrettyPrint.js

https://github.com/padolsey-archive/prettyprint.js

我有這方面的書籤,任何網頁上轉儲window

javascript:!function(){var t=document.createElement("script");t.setAttribute("src","https://rawgit.com/padolsey-archive/prettyprint.js/master/prettyprint.js"),document.head.appendChild(t),t.onload=function(){var t=prettyPrint(window);document.body.innerHTML="",document.body.insertBefore(t,document.body.firstChild)}}(); 

enter image description here

0

你的問題是一種混亂的,它會工作,你擁有它只要你調用該方法badass.__str__(),如果你不想調用函數來獲取字符串值的方式,你可以嘗試設置getter__string__這樣的:

function hsl_obj(h,s,l) { 
    this.h = h; 
    this.s = s; 
    this.l = l; 
} 
Object.defineProperty(hsl_obj.prototype, '__str__', { 
    get: function() { 
    return "hsl(" + this.h + ", " + this.s + "%, " + this.l + ")"; 
    } 
}) 

var badass = new hsl_obj(76, 64, 59); 
console.log(badass.__str__) // --> "hsl(76, 64%, 59)" 
0

我想這裏的困惑是,你期望的console.log()總是期望一個字符串,但會接受任何類型的d嘗試表示它。

所以當你傳遞一個對象時,它會向你顯示那個對象。 也許使用console.log(badass + '');會導致你所期望的?

雖然問題很混亂,但我認爲它需要更具體。 我只是用自己的方式來解釋這個問題...

相關問題