Nic*_*ova 4 javascript babel ecmascript-6
.call()和super()之间有什么区别?super()只是es2015的东西吗?或者.call()有更多功能吗?
gma*_*man 11
super()调用您扩展的类的构造函数
class Foo extends Bar {
constructor() {
super(); // calls Bar's constructor
}
}
Run Code Online (Sandbox Code Playgroud)call是一个泛型函数,可以用于任何函数
function a() { console.log(this); };
function b() { console.log(this); };
function c() { console.log(this}; };
a.call("hello");
b.call(123);
c.call({});
Run Code Online (Sandbox Code Playgroud)super知道你从哪个类继承并自动传递正确的类this.
class Foo extends Bar {
constructor() {
super(); // calls Bar's constructor
}
}
Run Code Online (Sandbox Code Playgroud)电话要求你明确.
class Foo extends Bar {
constructor() {
Bar.call(this); // You had explicitly specify 'Bar'
// and explicitly pass 'this'
}
}
Run Code Online (Sandbox Code Playgroud)super允许您隐式调用父项上的函数
class Bar {
log() {
console.log("bar-log");
}
}
class Foo extends Bar {
log() {
super.log();
}
}
Run Code Online (Sandbox Code Playgroud)电话要求你明确
class Bar {
log() {
console.log("bar-log");
}
}
class Foo extends Bar {
log() {
Bar.prototype.log.call(this); // Explicitly reference bar's log function
// and explicitly specify 'this'
}
}
Run Code Online (Sandbox Code Playgroud)我认为你可以争辩super提供一部分功能call.有些人可能会把它称为语法糖意味着你可以使用你可以使用的call任何地方super,超级只是更容易,因为它隐式调用你扩展/继承的类中的东西(技术上是原型链中的下一个东西?),因为它隐含地传递this给你.