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

Ama*_*pta 5 javascript object node.js

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

[a,b,c,d]
Run Code Online (Sandbox Code Playgroud)

但我仍然可以调用一个函数jsObj.e().为什么该方法e不属于Object.keysObject.getOwnPropertyNames?他们是怎么做到的?

在这里,它表示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 (...){...}
Run Code Online (Sandbox Code Playgroud)

Emi*_*lev 5

Object.e必须在对象的原型上定义.像这样:

var test = function() {}
test.prototype = { e: function() { return 'e'; } }
var obj = new test();
Object.keys(obj) // returns []
obj.e() // returns 'e'
Run Code Online (Sandbox Code Playgroud)

获取原型键的一种方法是简单地获取原型并使用Object.keys()函数:

Object.keys(Object.getPrototypeOf(obj))
Run Code Online (Sandbox Code Playgroud)

但是,这不会为您提供原型原型的键.