为什么JavaScript中Object类的静态方法不被其他类继承

问题描述 投票:0回答:1

在 JavaScript 中,如果我创建一个带有静态方法的类,然后创建该类的子类,我也可以使用子类名称调用静态方法(静态方法是继承的)。

Object 类是所有类的超类,具有许多静态方法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object 但为什么这些方法都不能使用任何子类名称来调用?

更新: 我注意到有人建议明确“extendObject。 但 Object 类已经是 JavaScript 中每个类的超类。证明是 .toString() 方法,每个类的每个对象都有它,我们知道它是从 Object 类继承的,即使你没有显式地写“extends Object”。 因此,每个类都隐式扩展 Object(直接或通过继承链),但为什么非静态方法会自动继承,而不是静态方法?

至于示例代码:

class Test {
  constructor() {}
}

const test = new Test();
console.log(test.toString()); // works, inherited from Object class
console.log(Test.<any static method of Object>)); // doesn't work
javascript inheritance static
1个回答
1
投票

OP 问为什么应该用 Object 来扩展 Test 以使静态方法能够工作。
嗯,JS 类是 ES6 的一个特性。在此之前只有原型存在。
JS 类需要从基类显式扩展。
当你省略这个时,类的实例

是从 Object 扩展而来的 Object.prototype

所以没有静态方法。

class Test extends Object{

}

console.log(Test.values({key:'value'}));

class Test2{
    test = 'test'
}

console.log(new Test2 instanceof Object);
console.log(new Test2().hasOwnProperty('test'));
   
console.log(Test2.values({key:'value'}));

© www.soinside.com 2019 - 2024. All rights reserved.