javascripts中的call和super有什么区别
时间: 2023-06-02 18:07:56 浏览: 68
在 JavaScript 中,call() 和 super() 都可以用来实现对基类构造函数的调用,但是它们有一些不同的用法和作用。
call() 方法允许您在当前上下文中使用另一个对象上的函数。您可以为该函数指定一个新的 this 对象,并传递一个由逗号分隔的参数列表。它通常用于实现继承,并允许您将一个对象的方法应用于另一个对象。
super() 方法用于调用父类的同名方法。它只能在类的内部函数中使用,并且用于访问父类的属性或方法。它通常用于继承和扩展类。
总之,call() 允许您在当前对象上使用另一个函数,而 super() 只能在类的内部使用,并且用于调用父类的方法。
相关问题
js中class类的super原理
在 JavaScript 中,当我们使用 `class` 定义一个类时,该类会自动继承自 `Object` 类,并且可以通过 `extends` 关键字继承其他类。当我们使用 `super` 关键字时,实际上是在调用父类的构造函数或方法。
在 ES6 之前,我们可以使用 `Object.getPrototypeOf` 方法获取一个对象的原型,然后使用 `call` 或 `apply` 方法调用父类的方法。而在 ES6 中,我们可以直接使用 `super` 关键字来调用父类的构造函数或方法,而不需要手动获取原型对象。
当我们使用 `super` 关键字调用父类的构造函数时,实际上是在调用父类的 `constructor` 方法,并且会自动传递当前实例的上下文。当我们使用 `super` 关键字调用父类的方法时,实际上是在调用父类原型链上的对应方法,并且会自动绑定当前实例的上下文。
总之,`super` 关键字的原理就是在继承链上调用父类的方法,并且自动绑定当前实例的上下文。
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
这个错误的意思是 JavaScript 堆内存不足。这意味着你的程序尝试使用更多内存,但是电脑上可用的内存不足以满足需求。
这种情况通常发生在你的程序中存在内存泄露(memory leak)或者你的程序使用了过多的内存。
解决方法可能包括:
- 寻找并修复内存泄露
- 优化你的程序,减少内存使用
- 尝试使用更大的内存限制来运行你的程序(例如,使用 `node --max-old-space-size=4096 script.js` 运行你的程序)