V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Guidoo
V2EX  ›  JavaScript

关于 js 的一个奇怪的问题

  •  
  •   Guidoo · 2022-12-09 15:34:18 +08:00 · 2496 次点击
    这是一个创建于 750 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    // Minder {}
    DOLLOR
        14
    DOLLOR  
       2022-12-09 16:12:53 +08:00
    用断点调试吧
    IvanLi127
        15
    IvanLi127  
       2022-12-09 18:11:05 +08:00
    Vue 开发者经典疑惑之一,我见过太多太多。。。。
    ochatokori
        16
    ochatokori  
       2022-12-09 18:16:28 +08:00 via Android
    @Guidoo #5 如果原型链只有一层 minderAll.minder.__proto__
    lmshl
        17
    lmshl  
       2022-12-09 18:42:02 +08:00
    我举个简单例子,题主能不能理解到就看悟性了😏
    (提示:console.log 在浏览器中被魔改增强过,不只是简单的输出字符串
    likesoda
        18
    likesoda  
       2022-12-10 13:23:28 +08:00 via iPhone
    console.log 打印的是对象快照,当展开对象时会重新获取对象
    Guidoo
        19
    Guidoo  
    OP
       2022-12-10 16:29:54 +08:00
    @lmshl 明白了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.