It avoids having to change the prototype. (That warning on MDN is awesome, strong +1 to that. Being able to modify prototypes at all is a mis-feature IMHO.)
On Fri, Feb 12, 2016 at 10:47 AM, Zac Hansen <xax...@gmail.com> wrote: > > When you say: > > > The preferred way to set a newly allocated object's prototype is to use > the FunctionTemplate's PrototypeTemplate. See the large comment for class > FunctionTemplate in v8.h. > > > What does "preferred" mean? Is it because of the type of thing in the > warning I put in my original post? Or some other reason why that method > is "preferred"? > > --Zac > > > On Fri, Feb 12, 2016 at 1:34 AM, Jakob Kummerow <jkumme...@chromium.org> > wrote: > >> Whether an object's prototype is changed from JavaScript or from C++ >> doesn't make a difference. (Why would it?) >> >> The preferred way to set a newly allocated object's prototype is to use >> the FunctionTemplate's PrototypeTemplate. See the large comment for class >> FunctionTemplate in v8.h. >> >> >> On Fri, Feb 12, 2016 at 5:44 AM, Zac Hansen <xax...@gmail.com> wrote: >> >>> I want to do the equivalent of Object.create() in javascript from C++, >>> but I don't see any way to specify the prototype of a new v8::Object from >>> the API. >>> >>> I was planning on creating the object with v8::Object::New and then >>> calling v8::Object::SetPrototype() on it, until I saw this: >>> >>> >>> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf >>> >>> Warning: Changing the [[Prototype]] of an object is, by the nature of >>> how modern JavaScript engines optimize property accesses, a very slow >>> operation, in *every* browser and JavaScript engine. The effects on >>> performance of altering inheritance are subtle and far-flung, and are not >>> limited to simply the time spent in obj.__proto__ = ... statement, but >>> may extend to *any* code that has access to *any* object whose >>> [[Prototype]] has been altered. If you care about performance you >>> should avoid setting the [[Prototype]] of an object. Instead, create a >>> new object with the desired [[Prototype]] using Object.create() >>> <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create> >>> . >>> >>> >>> That's a pretty terrifying situation, so I want to make sure that using >>> SetPrototype() doesn't incur that kind of penalty - at least on a newly >>> created and unused object. >>> >>> Thank you. >>> >>> --Zac >>> >>> -- >>> -- >>> v8-users mailing list >>> v8-users@googlegroups.com >>> http://groups.google.com/group/v8-users >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "v8-users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to v8-users+unsubscr...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> -- >> v8-users mailing list >> v8-users@googlegroups.com >> http://groups.google.com/group/v8-users >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "v8-users" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/v8-users/L9e3eHyjE4A/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> v8-users+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > -- > v8-users mailing list > v8-users@googlegroups.com > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to the Google Groups > "v8-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to v8-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.