假设有一些库javascript对象jsObj
。在调用 Object.keys
或 Object.getOwnPropertyNames
时,我得到了一个属性列表,例如
[a,b,c,d]
但我仍然可以调用像 jsObj.e()
这样的函数。为什么方法 e
不是 Object.keys
或 Object.getOwnPropertyNames
的一部分?他们是怎么做到的?
Here ,它表示 Object.getOwnPropertyNames
也将返回不可枚举的属性。那么像上面的e
这样的属性有什么特点呢。
我正在使用 opentok服务器端SDK。使用以下代码,
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
必须在对象的原型(prototype)上定义。像这样:
var test = function() {}
test.prototype = { e: function() { return 'e'; } }
var obj = new test();
Object.keys(obj) // returns []
obj.e() // returns 'e'
获取原型(prototype)键的一种方法是简单地获取原型(prototype)并使用 Object.keys()
函数:
Object.keys(Object.getPrototypeOf(obj))
然而,这不会为您提供原型(prototype)原型(prototype)的 key 。
关于javascript - 未在 Object.keys 或 Object.getOwnPropertyNames 下列出但可以调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319835/