for in 为什么不遍历对象原型上固有属性?

发布于 2022-09-12 13:34:47 字数 539 浏览 32 评论 0

var triangle = { a: 1, b: 2, c: 3 };

Object.setPrototypeOf(triangle, { l: function add() {} });

function ColoredTriangle() {
  this.color = "red";
}

ColoredTriangle.prototype = triangle;

var obj = new ColoredTriangle();

for (var prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

输出:
obj.color = red
obj.a = 1
obj.b = 2
obj.c = 3
obj.l = function add() {}

我们自定义的原型属性被打印了,但是对象的原型链上还有很多属性,为什么这些属性没被打印,难道是故意这么设计的?
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

那小子欠揍 2022-09-19 13:34:47

设计如此。

Iterating over own properties only.

for...in - JavaScript | MDN (mozilla.org)

嘿嘿嘿 2022-09-19 13:34:47

因为对象的原型链上内置方法基本都是不可枚举的。

Object.getOwnPropertyDescriptor(Object.prototype, 'constructor').enumerable // false
Object.getOwnPropertyDescriptor(Object.prototype, 'isPrototypeOf').enumerable // false
Object.getOwnPropertyDescriptor(Object.prototype, 'hasOwnProperty').enumerable // false
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文