非常奇怪的行为。为什么下面的日志**“A.fn”只运行,而下一行“B.fn”甚至不运行?下面的代码到底发生了什么?
我使用的是巴别塔第二阶段**,这是大多数React项目中使用的。
class A {
fn = () => {
console.log("A.fn");
}
}
class B extends A {
fn() {
super.fn();
console.log('B.fn')
}
}
new B().fn(); // why this logs "A.fn" only, while "B.fn" isn't logged?
1条答案
按热度按时间gj3fmq9x1#
我能确切地知道下面这段代码发生了什么吗?
公共类字段等效于:
也就是说,
fn
是在示例本身上定义的,而当使用方法语法时,方法是在原型上定义的。让我们记录B
的示例:第一个
fn
是在构造函数中创建的,第二个是定义为B
的类方法的,因为fn
是在示例上定义的,即在原型链中“较高”,它 * 遮蔽 *B.prototype.fn
,意味着B.prototype.fn
从未被调用。这就是原型连锁店的运作方式
下面是一个简单的例子,也有同样的问题: