2017-02-18 768 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() вместо этого, но я хочу знать, если этот метод возможно. Это было бы похоже на метод __str__ в python.

EDIT

Прямо сейчас, когда я называю 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() всегда ожидают строку, но он будет принимать любой тип и попытаться повторение возмущаться.

Итак, когда вы передаете ему объект, он показывает вам этот объект. Возможно, использование console.log(badass + ''); приведет к тому, что вы ожидали?

Вопрос путается, хотя, я думаю, это должно быть более конкретным. Я просто интерпретирую вопрос по-своему ...