Suppose there is some library javascript object jsObj
. On calling Object.keys
or Object.getOwnPropertyNames
, I get a list of properties like
[a,b,c,d]
But still I can call a function like jsObj.e()
. Why the the method e
is not part of Object.keys
or Object.getOwnPropertyNames
? How they are doing it?
Here, it says that Object.getOwnPropertyNames
will return non enumerable properties too. So what is the characterstic of property like e
above.
I am using opentok server side SDK. Using following code,
var OpenTok = require('opentok');
var opentok = new OpenTok(config.tokbox.apiKey, config.tokbox.secret);
console.log("opentok1", Object.getOwnPropertyNames(opentok));
prints -> // [ '_client',
'apiKey',
'apiSecret',
'apiUrl',
'startArchive',
'stopArchive',
'getArchive',
'deleteArchive',
'listArchives' ]
console.log("opentok2", opentok.createSession);
prints -> function (...){...}
Object.e
must be defined on the object's prototype. Like this:
var test = function() {}
test.prototype = { e: function() { return 'e'; } }
var obj = new test();
Object.keys(obj) // returns []
obj.e() // returns 'e'
A way of getting the prototypes keys is simply getting the prototype and the use the Object.keys()
function:
Object.keys(Object.getPrototypeOf(obj))
This will however not give you keys of the prototypes prototype.
The propety of an JS Object could be
length
) are not enumerable, you can define your own non enumerable property with Object.defineProperty()
then iterating functions works on some subset of this properties:
Object.keys()
-- returns an array of a given object's own enumerable properties.Object.getOwnPropertyNames
-- returns an array of all properties (enumerable or not) found directly upon a given object
so none of this function iterates over inherited properties. If you wanna iterate all properties without resolution of ownership, then you need for... in cycle
, like:
var keys = [];
for (var key in object)
keys.push(key);
but this will not iterate over non-enumerable properties.
For complete overview of ownership and enumerability see this documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With