- From: Tobie Langel <notifications@github.com>
- Date: Wed, 21 Dec 2016 10:25:33 -0800
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/issues/188/268601139@github.com>
A few questions for @bzbarsky regarding the `jsonified` proposal above: 1. How does it deal with circular references, if at all? 1. What's the precise inheritance story? For example, given the following WebIDL: ```webidl [Constructor] interface A { attribute DOMString foo; jsonified; } interface B : A { attribute DOMString bar; } ``` Which of the following would `JSON.stringify(new B());` return? ```json { "foo": "…", "bar": "…" } { } ``` What about: ```webidl [Constructor] interface A { attribute DOMString foo; jsonified; } interface B : A { attribute DOMString bar; } interface C : B { attribute DOMString baz; } ``` Which of the following would `JSON.stringify(new C());` return? ```json { "foo": "…", "bar": "…", "baz": "…" } { "foo": "…", "baz": "…" } { } ``` 1. What would be the interaction with actual `toJSON` operations found in the inheritance tree? E.g.: ```webidl [Constructor] interface A { attribute DOMString foo; jsonified; } interface B : A { attribute DOMString bar; DOMString toJSON(); } interface C : B { attribute DOMString baz; jsonified; } ``` Imagine `toJSON` simply returns the value of baz (`stringifier = baz` in current parlance). What happens now for `JSON.stringify(new C());`? ```json { "foo": "…", "baz": "…" } "…" { "baz": "…" } ``` 1. Could we instead imagine having a default algorithm for `toJSON` operations (that would return all own and inherited serializable attributes) but that could be overridden in prose? ```webidl [Constructor] interface A { attribute DOMString foo; any toJSON(); } interface B : A { attribute DOMString bar; } interface C : B { attribute DOMString baz; } interface D : C { attribute DOMString qux; DOMString toJSON(); } // D.toJSON() returns the string "Hello world!" ``` `JSON.stringify(new C());` would return: ```json { "foo": "…", "bar": "…", "baz": "…" } ``` `JSON.stringify(new D());` would return: ```json "Hello world!" ``` If my understanding of the `jsonified` proposal is correct, the only feature we'd loose is the ability for interfaces to opt out of having their attributes serilaized. Is this actually useful? It feels a bit weird if serialization requirements start influencing how interfaces inheritance gets split up, imho. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/heycam/webidl/issues/188#issuecomment-268601139
Received on Wednesday, 21 December 2016 18:26:14 UTC