是否可以创建一个对象以便返回一个人类可读的字符串?
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}
。
答案 0 :(得分: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)}}();
答案 1 :(得分: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)"
答案 2 :(得分:0)
我认为这里的混乱是你期望console.log()总是期望一个字符串,但它会接受任何类型并尝试表示它。
因此,当您传递一个对象时,它会向您显示该对象。
也许使用console.log(badass + '');
会产生你期望的结果?
但问题令人困惑,我认为需要更加具体。 我只是以自己的方式解释这个问题......