If I wanted to re-implement Object.create(prototype,
properties_object) using the API with the same performance
characteristics as the built-in Object.create(), what API calls would I use
in the callback from my FunctionTemplate?



On Fri, Feb 12, 2016 at 2:58 AM, Jakob Kummerow <[email protected]>
wrote:

> On Fri, Feb 12, 2016 at 11:45 AM, Zac Hansen <[email protected]> wrote:
>
>> Ok, so there is no ongoing performance penalty if I change the prototype
>> of an object?
>>
>
> Who said that?
>
>
>> Is there a reason there's no API call for setting the prototype of a
>> javascript object created in C++ to a javascript-created object?  In other
>> words, why does v8::Object::New() not have an option to take a v8::Object?
>>
>
> Sounds like you *want* to muck with dynamically created/modified prototype
> chains. That'll probably end up being slow either way. Maybe you don't
> care. So maybe just do whatever seems easiest to you, and see if it works
> out OK?
>
>
> On Fri, Feb 12, 2016 at 2:41 AM, Jakob Kummerow <[email protected]>
>> wrote:
>>
>>> 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 <[email protected]> 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 <[email protected]
>>>> > 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 <[email protected]> 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
>>>>>> [email protected]
>>>>>> 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 [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>> --
>>>>> --
>>>>> v8-users mailing list
>>>>> [email protected]
>>>>> 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
>>>>> [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>> --
>>>> --
>>>> v8-users mailing list
>>>> [email protected]
>>>> 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 [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>>> --
>>> v8-users mailing list
>>> [email protected]
>>> 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
>>> [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
>> --
>> v8-users mailing list
>> [email protected]
>> 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 [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> --
> v8-users mailing list
> [email protected]
> 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
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to