diff --git a/src/zcl_mjs.clas.abap b/src/zcl_mjs.clas.abap index 03ff738..3059041 100644 --- a/src/zcl_mjs.clas.abap +++ b/src/zcl_mjs.clas.abap @@ -2113,6 +2113,12 @@ CLASS zcl_mjs IMPLEMENTATION. rs_val = string_val( `boolean` ). WHEN 4. rs_val = string_val( `function` ). + WHEN 6. + IF ls_toval-obj->has( `__is_class__` ) = abap_true. + rs_val = string_val( `function` ). + ELSE. + rs_val = string_val( `object` ). + ENDIF. WHEN OTHERS. rs_val = string_val( `object` ). ENDCASE. @@ -2262,6 +2268,7 @@ CLASS zcl_mjs IMPLEMENTATION. ENDIF. lo_cls_env->define( iv_name = `__super_proto__` is_val = ls_super_cls_val ). ENDIF. + ls_clsobj-obj->set( iv_key = `__is_class__` ir_val = box_value( bool_val( abap_true ) ) ). LOOP AT -methods INTO DATA(ls_cm). DATA lr_mfn TYPE REF TO data. CREATE DATA lr_mfn TYPE zif_mjs=>ty_function. diff --git a/src/zcl_mjs.clas.testclasses.abap b/src/zcl_mjs.clas.testclasses.abap index b3676c9..0115618 100644 --- a/src/zcl_mjs.clas.testclasses.abap +++ b/src/zcl_mjs.clas.testclasses.abap @@ -100,6 +100,7 @@ CLASS ltcl_test DEFINITION FOR TESTING METHODS test_new_set FOR TESTING RAISING zcx_mjs_runtime. METHODS test_set_has FOR TESTING RAISING zcx_mjs_runtime. METHODS test_namespace_class FOR TESTING RAISING zcx_mjs_runtime. + METHODS test_class_typeof FOR TESTING RAISING zcx_mjs_runtime. METHODS test262 FOR TESTING RAISING zcx_mjs_runtime. @@ -845,6 +846,16 @@ CLASS ltcl_test IMPLEMENTATION. exp = |true| ). ENDMETHOD. + METHOD test_class_typeof. + DATA(lv_nl) = cl_abap_char_utilities=>newline. + DATA(lv_js) = + `class MyClass {}` && lv_nl && + `console.log(typeof MyClass);`. + cl_abap_unit_assert=>assert_equals( + act = trim( zcl_mjs=>eval( lv_js ) ) + exp = |function| ). + ENDMETHOD. + METHOD test262. DATA(lv_nl) = cl_abap_char_utilities=>newline. DATA(lv_js) =