js中class类的super原理
时间: 2024-05-30 16:16:38 浏览: 169
在 JavaScript 中,当我们使用 `class` 定义一个类时,该类会自动继承自 `Object` 类,并且可以通过 `extends` 关键字继承其他类。当我们使用 `super` 关键字时,实际上是在调用父类的构造函数或方法。
在 ES6 之前,我们可以使用 `Object.getPrototypeOf` 方法获取一个对象的原型,然后使用 `call` 或 `apply` 方法调用父类的方法。而在 ES6 中,我们可以直接使用 `super` 关键字来调用父类的构造函数或方法,而不需要手动获取原型对象。
当我们使用 `super` 关键字调用父类的构造函数时,实际上是在调用父类的 `constructor` 方法,并且会自动传递当前实例的上下文。当我们使用 `super` 关键字调用父类的方法时,实际上是在调用父类原型链上的对应方法,并且会自动绑定当前实例的上下文。
总之,`super` 关键字的原理就是在继承链上调用父类的方法,并且自动绑定当前实例的上下文。
相关问题
class类中的super
在class类中,super关键字有两种用法:
1. 在子类的构造函数中使用super(),表示调用父类的构造函数。这样可以继承父类的属性和方法,并且可以在子类中添加自己的属性和方法。在这种情况下,super()相当于父类的构造函数A.prototype.constructor.call(this)。
范例:
```javascript
class A {
constructor() {
this.x = 1;
}
}
class B extends A {
constructor() {
super(); // 调用父类的构造函数
console.log(this.x); // 输出:1
}
}
let b = new B();
```
2. 在子类的普通方法中使用super,表示调用父类的方法。在这种情况下,super内部的this指向当前的子类实例,所以如果通过super对某个属性进行赋值,这时super就是this,赋值的属性会变成子类实例的属性。
范例:
```javascript
class A {
constructor() {
this.x = 1;
}
}
class B extends A {
constructor() {
super();
this.x = 2;
super.x = 3; // super.x 等同于 this.x
console.log(super.x); // 输出:undefined (super.x 等同于 A.prototype.x)
console.log(this.x); // 输出:3
}
}
let b = new B();
```
python中class类的super
在Python中,`super()`是一个内置函数,用于调用父类的方法。通过使用`super()`,我们可以在子类中调用父类的方法,包括`__init__()`方法。使用`super().__init__()`可以继承父类的`__init__()`方法并调用它。
下面是一个例子来说明如何使用`super()`调用父类的方法:
```python
class A:
def __init__(self):
print("A initialized")
class B(A):
def __init__(self):
super().__init__() # 调用父类A的__init__()方法
print("B initialized")
b = B() # 输出:A initialized B initialized
```
在这个例子中,类B继承自类A。在类B的`__init__()`方法中,我们使用`super().__init__()`调用了父类A的`__init__()`方法,从而实现了对父类初始化方法的继承。
另外,如果子类没有定义`__init__()`方法,它会自动继承父类的`__init__()`方法。这意味着在创建子类对象时,父类的`__init__()`方法会被自动调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Python类中的继承——super(包含super(子类, self).__init__()以及其他父类的方法)](https://blog.csdn.net/zhulewen/article/details/125830877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [关于pyhton的class的super用法](https://blog.csdn.net/weixin_40676212/article/details/120200758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文