您可以将超类引用转换为子类引用吗?子类引用到超类引用?如果是这样,举个例子。如果没有,请解释原因
答案 0 :(得分:2)
JavaScript根本没有输入类型的引用。对象引用只是一个对象引用,它具有的任何类型信息的完整和完整范围是它是一个对象引用。因此没有需要将引用从超类引用转换为子类引用。
对象本身(不是引用)确实有一些信息,在某些方面,它通过其原型间接地将其链接回其“类”(也就是说,它的构造函数) - 假设A)原型不是通过Reflect.setPrototypeOf
改变的(一个合理的假设,但是不能保证),并且B)构造函数上的prototype
属性不会改变(通常也是一个合理的假设,但不是一旦代码库完成初始化[并且直到那时],保证。例如,如果通过构造函数创建对象,则在正常情况下,它从其原型继承constructor
属性,在正常情况下,该属性指向构造函数。你不能真正依赖它,因为如果有人修改了构造函数的prototype
属性引用的对象,它可能根本没有constructor
属性(因此从继承它) 原型)或者可能有一个指向错误的功能。
重要的是要记住JavaScript是原型语言,而不是基于类的语言。 ES6中的新类语义几乎完全是用于建立构造函数链及其原型的语法糖。 (“差不多”因为有一些管道工作与子类化内置类似的数组,我们以前无法做到这一点。)JavaSCript不是基于类的一个方面是这样的问题与它没有真正的联系。