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曾经添加该属性以更改对象的原型,由于许多库采用了该用法,其他浏览器也实现了它,并将其添加到规范中,尽管这被认为是一个设计错误(性能噩梦)。到目前为止,这是唯一可靠的向下传输静态类属性的方法
在未来,浏览器对类的支持有望得到改善,我们不必再依赖这些透明黑客了。静态属性可能存在重复