constructor - Javascript - List all properties/methods from an object -


i know object literal can have keys listed using object.keys() method. object created through constructor function?

function foo () {} foo.prototype.bar = 'bar'; foo.prototype.baz = 'baz';  var foo = new foo(); console.log(object.keys(foo).join(', ')); // returns '' console.log(object.getownpropertynames(foo).join(', ')); // returns '' 

object.keys own enumerable properties, , getownpropertynames own properties (even if not enumerable). neither of them give names of properties inherited prototype (or prototype, or its, ...).

if care enumerable properties, see trincot's answer.

if want all of them,¹ if they're not enumerable, have loop through prototype chain:

function getallpropertynames(obj) {    var result = [];    while (obj && obj !== object.prototype) {      result.push.apply(result, object.getownpropertynames(obj));      obj = object.getprototypeof(obj);    }    return result;  }    function foo () {}  foo.prototype.bar = 'bar';  foo.prototype.baz = 'baz';    var foo = new foo();  console.log(getallpropertynames(foo));

in example, stopped when reached object.prototype, of course keep going until hit null instead:

function getallpropertynames(obj) {    var result = [];    while (obj) {      result.push.apply(result, object.getownpropertynames(obj));      obj = object.getprototypeof(obj);    }    return result;  }    function foo () {}  foo.prototype.bar = 'bar';  foo.prototype.baz = 'baz';    var foo = new foo();  console.log(getallpropertynames(foo));


¹ "if want all of them..." note in above, haven't tried properties named symbols instead of strings. if did, we'd use getownpropertysymbols getownpropertynames.


Comments

Popular posts from this blog

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

jsf - "PropertyNotWritableException: Illegal Syntax for Set Operation" error when setting value in bean -

arrays - Algorithm to find ideal starting spot in a circle -