- From: Marcos Caceres <w3c@marcosc.com>
- Date: Sun, 25 Mar 2012 03:07:07 +0100
- To: Cameron McCormack <cam@mcc.id.au>
- Cc: public-script-coord <public-script-coord@w3.org>
On Sunday, 25 March 2012 at 00:39, Cameron McCormack wrote: > Marcos Caceres: > > Yeah.. I kinda realised that after I sent the email… however…. how do you create one without first coercing an exception object out of the exception type you want? I had a go at trying to do it [1]… but I had to do the following for a DOMException: > > > > try { > > //force an exception to be generated; > > document.removeChild({}) > > } catch (e) { > > //use it as the prototype > > newException = Object.create(e) > > } > > > > > > //alias for the prototype, helps us populate the new object > > var proto = newException.__proto__ > > > > //"shadow" the name property on the new object > > //Chrome claims these are writable, but they aint! :) > > props = Object.getOwnPropertyDescriptor(proto, "name"); > > props.value = name; > > Object.defineProperty(newException, "name", props); > > > > I'm not really sure what you're doing here. Do you want to construct a > new DOMException even though the implementation does not yet allow `new > DOMException()`? Yes. I'm trying to implement various specifications in ECMAScript that require me to throw a DOMException. > Note that you want to end up with an object whose prototype is > DOMException.prototype, not a DOMException instance. Good point. > But before the > underlying DOM implementation supports constructable DOMException > objects you're not going to be able to create one just by using > Object.create, and that's because things on DOMException.prototype > expect the instance to be a platform exception object, and from the > perspective of the DOM implementation your object you have created with > Object.create() is not a platform exception object. Right. But it's as close as I can get to the real thing… so again we come full circle about having some means of create a DOMException (or if faking it is good enough, which may just be).
Received on Sunday, 25 March 2012 02:07:40 UTC