首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示javascript原型链

显示javascript原型链
EN

Stack Overflow用户
提问于 2015-08-02 06:31:07
回答 1查看 232关注 0票数 1

我想看看原型链中的项目列表,有什么方法可以知道吗?我尝试使用getOwnPropertyNames,但它没有显示原型链

代码语言:javascript
复制
function Grid(width, height) {
  this.width = width;
  this.height = height;
}
Grid.prototype.example = function() {console.log("hello");}

console.log(Object.getOwnPropertyNames(new Grid()));
//["width", "length"]

为什么它没有显示,有什么方法显示它吗?

此外,当从另一个构造函数继承属性时,使用getOwnPropertyNames时会出现一个奇怪的错误。

代码语言:javascript
复制
function Grid(width, height) {
  this.space = new Array(width * height);
  this.width = width;
  this.height = height;
}

console.log(Object.getOwnPropertyNames(new Grid()));
//it gives me these errors
Uncaught RangeError: Invalid array length
at new Grid (<anonymous>:3:20)
at <anonymous>:2:40
at Object.InjectedScript._evaluateOn (<anonymous>:905:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:838:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)

为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-02 06:37:37

我想最简单的方法是使用for循环:

代码语言:javascript
复制
for (var prop in obj) {
  console.log(prop);
}

如果要获取所有属性,而不仅仅是可枚举属性,则可以使用Object.getOwnPropertyNamesObject.getPrototypeOf的组合。

代码语言:javascript
复制
function getPropertyNames(obj) {
  return obj ? 
    Object.getOwnPropertyNames(obj)
      .concat(getPropertyNames(Object.getPrototypeOf(obj))) :
    [];
}

注意:此列表可以包含重复项。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31769195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档