[webkit-dev] JSObjectCallAsFunctionCallback question

Zhe Su james.su at gmail.com
Thu May 14 20:57:19 PDT 2009


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/2031b3d2/attachment.html>


More information about the webkit-dev mailing list