JavaScript - 全局 类 和继承之间的混淆

JavaScript - Confusion between global classes and inheritance

这里是学JS的初学者。我不明白为什么当你声明一个变量时它不会完全继承它的父 class 方法,例如:

// I initiate an array (my question is the same for all type of vars)
var myArr = ["foo", "bar"]

// Let's say I call a random function of the parent class Array
console.log(Array.isArray(myArr)); // true

// Since I assume that myArr inherited of the COMPLETE LIST of Array's methods, I should be able to do this:
console.log(myArr.isArray()); // Uncaught TypeError

为什么变量不继承其父 classes 的所有方法?相反,您需要混合使用 ArraymyArr 的函数。两侧应该是一样的吧?

Array.isArray 也可以在非数组上调用,所以从其他 classes 的实例调用它不会有方法,导致运行时错误。基本上如果你知道它是一个数组并且它是可调用的,你就不需要调用它。

这就是为什么它不在数组原型上并且不能从实例中调用的原因。

const a = null
a.isArray() // bad
Array.isArray(a) // good

开发人员可以在 Javascript 中选择向 class、实例(又名原型)或两者添加方法。在这种情况下,它仅被添加到 class,而不是实例。

它本来可以添加到 Object 的原型中,但它仍然不会出现在 booleannumberstringsymbol, 或 undefined.

您需要将数组作为参数传递给 isArray 函数。
例如:

console.log(myArr.isArray(myArr))

当你声明一个变量时,它是 Class 的一个实例,没有继承。

当您声明一个扩展另一个 class 的 class 时,继承就发生了。

Array.isArray() 是 JavaScript 数组对象的静态 属性。

通常,静态方法用于实现属于 class 的函数,但不属于它的任何特定对象。