2017-02-18 2 views
0

Ist es möglich, ein Objekt so zu erstellen, dass eine für Menschen lesbare Zeichenfolge zurückgegeben wird?js: Objekt, das eine vom Menschen lesbare Zeichenfolge zurückgibt

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); 

Ich weiß, dass ich __str__-toString und badass.toString() nur stattdessen ändern könnte, aber ich möchte wissen, ob diese Methode möglich ist. Es wäre ein wenig wie die __str__ Methode in Python.

EDIT

Gerade jetzt, wenn ich badass aufrufen, gibt es hsl_obj {h: 76, s: 64, l: 59}.

+3

Vielleicht 'JSON.stringify (obj);'? – mrlew

+0

War im Begriff, dasselbe zu sagen, da Frage etwas merkwürdig ist :) – Janne

+0

Wann sollte Zeichenkette zurückgegeben werden? – guest271314

Antwort

0

Sie wollen PrettyPrint.js

https://github.com/padolsey-archive/prettyprint.js

ich ein Bookmarklet für sie haben, die window auf jeder Seite Dumps.

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

Ihre Frage ist eine Art verwirrend, es wird die Art und Weise arbeiten, haben Sie es vorausgesetzt, Sie rufen Sie die Methode badass.__str__(), wenn Sie nicht den String-Wert zu erhalten, wollen die Funktion aufrufen, Sie kann versuchen, eine getter für __string__ wie diese Einstellung:

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

ich die Verwirrung hier denke ist, dass Sie console.log() erwarten eine Zeichenfolge immer zu erwarten, aber es wird jede Art eine akzeptieren d versuche es darzustellen.

Wenn Sie also ein Objekt übergeben, wird Ihnen dieses Objekt angezeigt. Vielleicht wird die Verwendung von console.log(badass + ''); zu dem führen, was Sie erwartet haben?

Die Frage ist jedoch verwirrend, ich denke, dass es genauer sein muss. Ich interpretiere die Frage nur auf meine eigene Art ...

Verwandte Themen