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 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