javascript - 未在 Object.keys 或 Object.getOwnPropertyNames 下列出但可以调用的函数

标签 javascript node.js object

假设有一些库javascript对象jsObj。在调用 Object.keysObject.getOwnPropertyNames 时,我得到了一个属性列表,例如

[a,b,c,d]

但我仍然可以调用像 jsObj.e() 这样的函数。为什么方法 e 不是 Object.keysObject.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/

相关文章:

JavaScript 按 ID 和名称将 3 个对象数组合并为 1 个对象数组

javascript - 如何让javascript对象的一个​​成员引用同一对象的另一个成员?

javascript - 如何将图像插入 Canvas 弧?

javascript - 尝试将 XMLHttpRequest 发送到 http ://api. lbs.yandex.net/geolocation 时收到错误请求错误 400

node.js - 环回中验证码而不是url

php - 获取字段不工作

java - Glassfish4 通过虚拟主机包含外部资源

javascript - 服务数据不应删除,同时使用 angularjs 刷新页面

node.js - 在 hapi 中安装 inert 后无法读取未定义的属性 'register'

javascript - 如何使用 nodejs exec 子进程运行终端命令后恢复 Nightwatch 测试