js:返回人类可读字符串的对象

问题描述:

是否可以创建一个对象以便返回人类可读字符串?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

你想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

你的问题是一种混乱的,它会工作,你拥有它只要你调用该方法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)" 

我想这里的困惑是,你期望的console.log()总是期望一个字符串,但会接受任何类型的d尝试表示它。

所以当你传递一个对象时,它会向你显示那个对象。 也许使用console.log(badass + '');会导致你所期望的?

虽然问题很混乱,但我认为它需要更具体。 我只是用自己的方式来解释这个问题...