Hi,

thank you for the feedback!

The constructor call now works, but the setProperty call does not seem to get 
forwarded.

If i do (new SubClass()).someProperty = true; the setProperty method of the 
TestClass/parent class is not called.

getProperty is called though.

There does not seem to be any Object.defineProperty API on the C level?

Thank you,

Moritz


On 03 Oct 2014, at 1:37 , Geoffrey Garen <gga...@apple.com> wrote:

> …Yet another option is to insert Function.prototype into the TestClass 
> prototype chain.
> 
> Geoff
> 
>> On Oct 2, 2014, at 4:37 PM, Geoffrey Garen <gga...@apple.com> wrote:
>> 
>> You’ll need to manually copy Function.prototype.apply to the TestClass 
>> prototype.
>> 
>> Another option is “Function.prototype.apply.call(TestClass, this, 
>> arguments)”.
>> 
>> Geoff
>> 
>>> On Oct 2, 2014, at 8:26 AM, Moritz Moeller <mmoel...@mxs.de> wrote:
>>> 
>>> Hi,
>>> 
>>> I’ve created a javascript class in native code (i.e. JSClassCreate, 
>>> JSObjectMakeConstructor etc.) and want to subclass this class in javascript.
>>> 
>>> So pretty much:
>>> 
>>>     JSClassDefinition classDef = kJSClassDefinitionEmpty;
>>>     classDef.className = "TestClass";
>>>     classDef.getProperty = class_getProperty;
>>>     classDef.setProperty = class_setProperty;
>>>     JSClassRef classRef = JSClassCreate(&classDef);
>>>     JSObjectRef constructor = JSObjectMakeConstructor(ctx, gClassRef, 
>>> class_constructor);
>>>     JSObjectSetProperty(ctx, JSContextGetGlobalObject(ctx), 
>>> JsString("TestClass"), constructor, 0, NULL);
>>> 
>>> class_constructor does:
>>>     return JSObjectMake(ctx, classRef, NULL);
>>> 
>>> This works, so I can do
>>>     var test = new TestClass();
>>>     test.field = 1;
>>> 
>>> and both class_constructor and class_setProperty is called.
>>> 
>>> Now I’m trying to subclass the TestClass:
>>>     function SubClass()
>>>     {
>>>         TestClass.apply(this, arguments);
>>>     }
>>> 
>>> here it already got the problem that TestClass - being a constructor - does 
>>> not have .bind() or .apply().
>>> 
>>> Does someone know how to get this working?
>>> 
>>> Thank you very much,
>>> 
>>> Mo
>>> _______________________________________________
>>> webkit-dev mailing list
>>> webkit-dev@lists.webkit.org
>>> https://lists.webkit.org/mailman/listinfo/webkit-dev
>> 
>> _______________________________________________
>> webkit-dev mailing list
>> webkit-dev@lists.webkit.org
>> https://lists.webkit.org/mailman/listinfo/webkit-dev
> 

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to