Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JSON.stringify и .valueOf (https://javascript.ru/forum/misc/30123-json-stringify-i-valueof.html)

FINoM 24.07.2012 23:27

JSON.stringify и .valueOf
 
Всем привет.
Конструкторы Number и String позволяют пихать в их экземпляры любые свойства, при этом, при стрингификации, получаем или строку или число, соответственно:
var string = new String( 'WTF' ),
number = new Number( 42 );
string.a = 12321;
number.b = 'qwerw';
number.c = {};

var json = JSON.stringify( {x: number, y: string } );
alert(json)

Как повторить тот же эффект для кастомного конструктора?
function X () {}
X.prototype.valueOf = function() { return 42; }

var json = JSON.stringify( { a: new X });
alert( json );
Мне нужно, чтоб вместо "пустого объекта" в json попало 42 (причем, тип заранее не известен: это может быть как число или строка, так и null).

Dim@ 24.07.2012 23:43

function X(){
 var valueOf = new Number(92);
 valueOf.lol = "LOOOOl";
 return valueOf; 
}
d = new X();
alert(d);
alert(d.lol)

может так или надо для любого конструктора?
Спасибо интересная задачка :thanks:

oneguy 25.07.2012 00:06

Функция JSON.stringify использует метод toJSON на конвертируемых объектах. Пример:
function X () {}
X.prototype.valueOf = function() { return 42; }
X.prototype.toJSON=X.prototype.valueOf;
var json = JSON.stringify( { a: new X });
alert( json );

dmitriymar 25.07.2012 00:07

Dim@,
valueOf это вобщето метод конструкторов Number ......

FINoM 25.07.2012 02:35

oneguy, спасибо.


Часовой пояс GMT +3, время: 09:11.