[webkit-dev] JSObjectCallAsFunctionCallback question

Zhe Su james.su at gmail.com
Fri May 15 00:28:35 PDT 2009


AFAIK, there is no way to achieve what you want by using staticFunc
structure. Of course, if you use different C functions for each staticFunc
entry, you actually don't need the name.

Regards
James Su

On Fri, May 15, 2009 at 3:24 PM, Xiong <browserwk at gmail.com> wrote:

> Thanks Su.
>
> I think i know you mean.
>
> To get the method name ["getValue"] via attach a private data to function
> object which create by JSObjectMake().
>
> Yes, it's a better way, but not for me.
>
> In my program, we have many Object and it's method and now all in
> staticFunc structure.
>
> Thanks again.
>
> -Xiong
>
>
> On Fri, May 15, 2009 at 11:57 AM, Zhe Su <james.su at gmail.com> wrote:
>
>> If you create a JSObject with JSObjectMake() function, you can have a
>> private data associated to the newly created JSObject. You can store
>> anything you want in the private data. So following approach might be
>> feasible for you:
>>
>> 1. define a special JSClass for your function, which has finalize and
>> callAsFunction set. In finalize() method, you need destroy the private data
>> associated to the JSObject, if necessary. callAsFunction points to your
>> getValue_cb.
>> 2. create the getValue function object by calling JSObjectMake() with the
>> function name "getValue" as private data.
>> 3. attach the function object to myObject with name "getValue". It might
>> be done in myObject class's initialize() method.
>> 4. in getValue_cb function you can retrieve the private data (which
>> contains the name) by calling JSObjectGetPrivate(function).
>>
>> The only drawback of this approach: you can't declare the function
>> statically in staticFunctions.
>>
>> Regards
>> James Su
>>
>> On Fri, May 15, 2009 at 10:53 AM, Xiong <browserwk at gmail.com> wrote:
>>
>>> Thanks Darin.
>>>
>>> For the first problem, as you said, all the functions are objects, and
>>> also have **properties**.
>>>
>>> So,can we add a member for the "function object" to store the method
>>> name[here is "getValues"] in theoretical ?
>>>
>>> And this also like the "JSObjectRef object" variable in the callback
>>> prototype,we can get the class name like this:
>>>
>>> toJS(object)->className().data()
>>>
>>> Thanks.
>>>
>>> -Xiong
>>>
>>>
>>> On Fri, May 15, 2009 at 10:29 AM, Darin Adler <darin at apple.com> wrote:
>>>
>>>> On May 14, 2009, at 7:03 PM, Xiong wrote:
>>>>
>>>>  1    what is the purpose of the "JSObjectRef function" variable? In my
>>>>> case, we never use.
>>>>>
>>>>
>>>> It’s fine to not use this if you don’t need to. In JavaScript, functions
>>>> are objects. Like other objects they can have properties. This argument is
>>>> passed to your C implementation so that it can get access to properties of
>>>> the function object if it has some reason to. In many cases there is no need
>>>> to do this.
>>>>
>>>>  2    In this function, i want to get the propertyName of the method, in
>>>>> this case, we need "getValues", can be implemented ?
>>>>>
>>>>
>>>> No, there's no way to do that, for a good architectural reason.
>>>>
>>>> A JavaScript function is a first class object. Using JSObjectMake will
>>>> create an object with a prototype that has functions stored in its
>>>> properties, but there’s nothing to prevent the JavaScript program from
>>>> taking that function and storing it somewhere else, in a property with
>>>> another name. When the function is called, it’s just an object, and there’s
>>>> no way to go back in time and find out where that object came from.
>>>>
>>>> Consider the similar situation of a data property. When you get the
>>>> length of an array, it's a number 1, not a number 1 that knows it came from
>>>> a property named "length".
>>>>
>>>>    -- Darin
>>>>
>>>>
>>>
>>> _______________________________________________
>>> webkit-dev mailing list
>>> webkit-dev at lists.webkit.org
>>> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090515/fd81c448/attachment.html>


More information about the webkit-dev mailing list