Re: Object creation in SpiderMonkey 45

Boris Zbarsky <[email protected]>
Newsgroups gmane.comp.mozilla.devel.jseng
Message-ID <[email protected]>
On 5/5/16 12:50 PM, Mihai Dobrescu wrote:
> On Thursday, May 5, 2016 at 7:38:32 PM UTC+3, Mihai Dobrescu wrote:
>> On Thursday, May 5, 2016 at 7:27:05 PM UTC+3, Boris Zbarsky wrote:
>>> Things used to default to "if you pass no prototype and just the class
>>> we'll do some fragile lookup to try to figure out the right prototype",
>>> but that went away in https://bugzilla.mozilla.org/show_bug.cgi?id=1125567
>>>
>>> So you need to pass in the right prototype object here.
>>>
>>> -Boris
>>
>> I don't understand what you mean. It is 45, not 38.
>
> + I used to pass nullptr for prototype, in 38, and it worked.

Sure.  It worked because JS_NewObject saw you passed null for the proto 
but a non-default class, took the class name, looked it up as a property 
on the global, assumed the result was the constructor for your class, 
got its .prototype and used that as the prototype.

That whole "look up the name on the global and hope it has something to 
do with us" thing was removed in the bug I link to above, which was 
fixed in Firefox 40.  Notably, 38 < 40 <= 45.

> I would expect that after initialization of classes, all the stuff to work as their definitions are loaded, including their functions.

The definitions are "loaded".  The functions are defined on the 
prototype object for your class.  But the object you're creating doesn't 
have that on its proto chain, because of the behavior change above.

-Boris
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.