关于 js 的一个奇怪的问题

2022-12-09 15:34:18 +08:00
 Guidoo

为什么'minderAll'里面有一个对象叫 'minder',但是 log 出来的是{}

2473 次点击
所在节点    JavaScript
19 条回复
ZLY201
2022-12-09 15:43:11 +08:00
为了提高浏览器性能,console.log 是异步的,试试 console.log(JSON.stringify(obj.minder));
NerbraskaGuy
2022-12-09 15:43:39 +08:00
打印对象的只是对象的引用,像楼上说的那样先字符串化
Guidoo
2022-12-09 15:49:54 +08:00
@zilongyao1366 这样也是{}
ochatokori
2022-12-09 15:55:47 +08:00
打印出来的{}就是那个 Minder 对象啊,可以理解成是 Minder 类的实例,console 给你显示出来类名而已
Guidoo
2022-12-09 15:56:42 +08:00
@ochatokori 那我怎么获取到 minder 对象的属性呢
wangtian2020
2022-12-09 15:58:28 +08:00
你控制台看到的第一条输出 minderAll 里的 minder
和第二条输出不是同一个对象
在你打印代码之后,你看到输出之前,改变了引用
你可以试着在 return 之前加一个 debugger ,这样子可以停下代码执行

我猜的
hidemyself
2022-12-09 16:01:04 +08:00
不能相信 console,你想看的话得 debug
Guidoo
2022-12-09 16:01:14 +08:00
@wangtian2020 确实不是一个对象 我找找原因
longjiahui
2022-12-09 16:01:28 +08:00
@Guidoo 是不是在原型链上啊、所以就看不到了。
longjiahui
2022-12-09 16:02:33 +08:00
顺着原型链一直点开?
dcsuibian
2022-12-09 16:06:23 +08:00
你这个 Minder 类有啥字段啊?

看看 PropertyDescriptor ,是不是 enumable 属性为 false 的?
acthtml
2022-12-09 16:09:28 +08:00
{} 表示此实例没有属性方法...
acthtml
2022-12-09 16:10:05 +08:00
class Minder {}
let a = new Minder();
console.log(a);

// Minder {}
DOLLOR
2022-12-09 16:12:53 +08:00
用断点调试吧
IvanLi127
2022-12-09 18:11:05 +08:00
Vue 开发者经典疑惑之一,我见过太多太多。。。。
ochatokori
2022-12-09 18:16:28 +08:00
@Guidoo #5 如果原型链只有一层 minderAll.minder.__proto__
lmshl
2022-12-09 18:42:02 +08:00
我举个简单例子,题主能不能理解到就看悟性了😏
(提示:console.log 在浏览器中被魔改增强过,不只是简单的输出字符串
likesoda
2022-12-10 13:23:28 +08:00
console.log 打印的是对象快照,当展开对象时会重新获取对象
Guidoo
2022-12-10 16:29:54 +08:00
@lmshl 明白了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/901353

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX