details: http://hg.nginx.org/njs/rev/740823b9f444 branches: changeset: 360:740823b9f444 user: Dmitry Volyntsev <xei...@nginx.com> date: Fri Jun 09 17:55:21 2017 +0300 description: Object.prototype.isPrototypeOf() method.
diffstat: njs/njs_object.c | 37 +++++++++++++++++++++++++++++++++++++ njs/test/njs_unit_test.c | 25 +++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 0 deletions(-) diffs (89 lines): diff -r e49777448f84 -r 740823b9f444 njs/njs_object.c --- a/njs/njs_object.c Fri Jun 09 17:55:08 2017 +0300 +++ b/njs/njs_object.c Fri Jun 09 17:55:21 2017 +0300 @@ -935,6 +935,36 @@ done: } +static njs_ret_t +njs_object_prototype_is_prototype_of(njs_vm_t *vm, njs_value_t *args, + nxt_uint_t nargs, njs_index_t unused) +{ + njs_object_t *object, *proto; + const njs_value_t *retval; + + retval = &njs_string_false; + + if (njs_is_object(&args[0]) && njs_is_object(&args[1])) { + proto = args[0].data.u.object; + object = args[1].data.u.object; + + do { + object = object->__proto__; + + if (object == proto) { + retval = &njs_string_true; + break; + } + + } while (object != NULL); + } + + vm->retval = *retval; + + return NXT_OK; +} + + static const njs_object_prop_t njs_object_prototype_properties[] = { { @@ -967,6 +997,13 @@ static const njs_object_prop_t njs_obje .value = njs_native_function(njs_object_prototype_has_own_property, 0, NJS_OBJECT_ARG, NJS_STRING_ARG), }, + + { + .type = NJS_METHOD, + .name = njs_string("isPrototypeOf"), + .value = njs_native_function(njs_object_prototype_is_prototype_of, 0, + NJS_OBJECT_ARG, NJS_OBJECT_ARG), + }, }; diff -r e49777448f84 -r 740823b9f444 njs/test/njs_unit_test.c --- a/njs/test/njs_unit_test.c Fri Jun 09 17:55:08 2017 +0300 +++ b/njs/test/njs_unit_test.c Fri Jun 09 17:55:21 2017 +0300 @@ -5992,6 +5992,31 @@ static njs_unit_test_t njs_test[] = { nxt_string("Object.getPrototypeOf('a')"), nxt_string("TypeError") }, + { nxt_string("var p = {}; var o = Object.create(p);" + "p.isPrototypeOf(o)"), + nxt_string("true") }, + + { nxt_string("var pp = {}; var p = Object.create(pp);" + "var o = Object.create(p);" + "pp.isPrototypeOf(o)"), + nxt_string("true") }, + + { nxt_string("var p = {}; var o = Object.create(p);" + "o.isPrototypeOf(p)"), + nxt_string("false") }, + + { nxt_string("var p = {}; var o = Object.create(p);" + "o.isPrototypeOf()"), + nxt_string("false") }, + + { nxt_string("var p = {}; var o = Object.create(p);" + "o.isPrototypeOf(1)"), + nxt_string("false") }, + + { nxt_string("var p = {}; var o = Object.create(p);" + "1..isPrototypeOf(p)"), + nxt_string("false") }, + { nxt_string("var d = new Date(''); d +' '+ d.getTime()"), nxt_string("Invalid Date NaN") }, _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel