【问题标题】:JavaScript - Confusion between global classes and inheritanceJavaScript - 全局类和继承之间的混淆
【发布时间】:2021-12-29 19:08:53
【问题描述】:

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

// 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

为什么变量不继承其父类的所有方法?取而代之的是,您需要在 ArraymyArr 的函数之间进行混合。两边应该是一样的吧?

【问题讨论】:

标签: javascript function class variables inheritance


【解决方案1】:

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

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

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

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

它可以添加到Object 的原型中,但它仍然不会出现在booleannumberstringsymbolundefined 的实例上。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 那么当我声明一个没有继承的变量时会发生什么?
    • @TerryMars 当您声明一个变量时,您将创建一个具有该对象所属类的属性的对象。在一个像石膏模型模具的类中思考,在声明的变量中像你从中得到的图形一样思考。
    【解决方案3】:

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

    console.log(myArr.isArray(myArr))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2020-01-12
      相关资源
      最近更新 更多