【问题标题】:Javascript console.log does not show derived class name - inheritance - classesJavascript console.log 不显示派生类名称 - 继承 - 类
【发布时间】:2015-08-03 10:01:19
【问题描述】:

我在玩 ECMAScript6 类。

我还是不明白为什么下面的代码:

"use strict";

class A {}
class B extends A {}

let b = new B();
console.log(b);

显示:

一个 { }

而不是:

B { }

现场示例:

(function () {
    "use strict";

    class A {}
    class B extends A {
        foo() {
        }
    }

    let b = new B();
    console.log(b);
})();
Open the console. Works only on very up-to-date browsers (such as Chrome 43+).

如何在 console.log 上获得预期的逻辑输出 B { }

我是否需要将我的班级名称指定为 "B" ?有没有这样的选项可以传递,或者属性或函数要定义?


T.J. Crowder 明白了:这是 Chrome 上的一个引用错误。

大家,你可以给这个错误加星标以增加它的优先级吗?

https://code.google.com/p/chromium/issues/detail?id=510688

【问题讨论】:

  • 在 Chrome 44 (OSX) 上测试是这种情况
  • 是的,Chrome 43 (Linux) 也是如此。
  • Chrome 45 测试版也是如此。 OSX
  • 公平地说,它显示的内容在技术上是正确的,因为 B 的实例也是 A 的实例。要真正检查您可以使用instanceof
  • @slebetman:按照这个逻辑,它应该显示Object {}

标签: javascript class ecmascript-6 prototypal-inheritance console.log


【解决方案1】:

您还没有说您使用的是什么浏览器,但我认为它必须是 Chrome,因为您显示的输出样式和它完全可以运行。 (如果我在 IE11 中运行它,我会得到 [object Object] {}。如果我在 Firefox 中运行它,我会得到一个错误——因为 Firefox doesn't support class yet。)

除了 Chrome 中的错误之外,我想不出任何原因。对 class 的支持对于 Chrome 来说是非常的新功能,很可能是开发工具还没有完全正确地处理它。 我在快速搜索中没有找到关于http://crbug.com 的错误报告,您可能需要提交一份。 但是you did find it

它确实应该在您的代码中显示B,而不是A。它确实使用了等效的老式方法:

(function() {
  "use strict";

  function A() {}

  function B() {
    A.call(this);
  }
  B.prototype = Object.create(A.prototype);
  B.prototype.constructor = B;

  var b = new B();
  console.log(b);
})();
Open the console.

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多