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

时间:2017-02-18 05:29:37

标签: javascript function tostring

是否可以创建一个对象以便返回一个人类可读的字符串?

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 个答案:

答案 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)}}();

enter image description here

答案 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 + '');会产生你期望的结果?

但问题令人困惑,我认为需要更加具体。 我只是以自己的方式解释这个问题......