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}
。
答
你想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)}}();
答
你的问题是一种混乱的,它会工作,你拥有它只要你调用该方法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 + '');
会导致你所期望的?
虽然问题很混乱,但我认为它需要更具体。 我只是用自己的方式来解释这个问题...
也许'JSON.stringify(obj);'? – mrlew
由于问题有点奇怪:) – Janne
什么时候应该返回字符串? – guest271314