javascript - 类内javascript中两种函数声明的区别?

标签 javascript inheritance

过去 2 年我一直在使用 ReactRedux,但是当我在 javascript 中使用 inheritance 时,我发现了差异javascript 中这两种类型的函数声明之间。

我有一个类a和一个类b,它继承自类a,每当我运行以下代码片段时,它注销

bfunc called from class a
afunc called from class b

我假设语法 bfunc = function(){ 将函数放入 this 中,语法 afunc() { 将函数放入在类的原型(prototype)中,但我不太确定。有人可以解释一下这种行为吗?

class a {
  afunc() {
    console.log('afunc called from class a');
  }

  bfunc = function() {
    console.log('bfunc called from class a');
  }
}

class b extends a {
  afunc() {
    console.log('afunc called from class b');
  }

  bfunc() {
    console.log('bfunc called from class b');
  }
}

const bObject = new b();
bObject.bfunc();
bObject.afunc();

bfunc called from class a
afunc called from class b

最佳答案

你的假设是正确的。如果您执行 console.log(bObject);,您将看到它有自己的 bfunc 属性,其中包含该函数。

由于原型(prototype)仅在对象没有自己的属性时才使用,因此即使它是由父类放入的,原型(prototype)也会优先。

关于javascript - 类内javascript中两种函数声明的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48022420/

相关文章:

ruby-on-rails - Rails 模型和 ActiveRecord 中的子类化

java - Java 中具有继承性的 Varargs

javascript - $scope.$watch 无法正常工作

javascript - zurb-foundation sections -> 导航部分时引入奇怪的空白

javascript - Service Worker 似乎没有更新

javascript - 在 Vue 中删除 v-for 元素的正确方法是什么?

c++ - 是否有可能确定/断言,如果一个虚函数被覆盖,另一个虚函数也被覆盖?

JavaScript "this.a = 2, b = 3"是在父作用域中查找的 "b"吗?

php - 如何从扩展 PHP 类中的静态调用中获取类名?

c# - 如何设计一个类来防止循环依赖在构造前调用派生成员?