Javascript 为什么不是对象

Javascript 为什么不是对象,javascript,ecmascript-6,prototype,babeljs,Javascript,Ecmascript 6,Prototype,Babeljs,我给巴贝尔写了以下代码: class Animal {} class Rabbit extends Animal {} 并将其传输到以下位置: "use strict"; function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subCla

我给巴贝尔写了以下代码:

class Animal {}

class Rabbit extends Animal {}
并将其传输到以下位置:

"use strict";

function _inheritsLoose(subClass, superClass) {
  subClass.prototype = Object.create(superClass.prototype);
  subClass.prototype.constructor = subClass;
  subClass.__proto__ = superClass;
}

var Animal = function Animal() {};

var Rabbit =
  /*#__PURE__*/
  function(_Animal) {
    _inheritsLoose(Rabbit, _Animal);

    function Rabbit() {
      return _Animal.apply(this, arguments) || this;
    }

    return Rabbit;
  }(Animal);
问题是它为什么使用这一行
子类和根据文档
\uuuu proto\uuuu
可以是object或null,但这里的
超类
是一个函数

我的问题不是重复的,因为我不是在问object.prototype=function.prototype,而是为什么
\uu proto\uu=typeof function
而不是
object
null
这是针对静态属性/方法的。它们也是继承的:

 class Animal {
   static test() { }
 }

 console.log(Rabbit.test());
现在要正确地传输,兔子构造函数必须继承动物构造函数。这通常没有问题,因为函数也是对象,因此可以相互继承。不幸的是,无法创建继承另一个函数的函数,该函数必须在以后设置:

 function Animal () { }
 Animal.test = function() { }

 function Rabbit() { }

 Object.setPrototypeOf(Rabbit, Animal);

 console.log(Rabbit.test());
现在,下一个问题是,
Object.setPrototypeOf
class
一样,是一个全新的对象,因此要将其向下传输,就不能使用它。这就是
。\uuuuuu proto\uuuuuu
属性发挥作用的地方:Chrome曾经添加该属性以更改对象的原型,由于许多库采用了该用法,其他浏览器也实现了它,并将其添加到规范中,尽管这被认为是一个设计错误(性能噩梦)。到目前为止,这是唯一可靠的向下传输静态类属性的方法


在未来,浏览器对
类的支持有望得到改善,我们不必再依赖这些透明黑客了。

静态属性可能存在重复