Baseline Widely available
ÐлÑÑевое Ñлово super иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð²Ñзова ÑÑнкÑий, пÑинадлежаÑÐ¸Ñ ÑодиÑÐµÐ»Ñ Ð¾Ð±ÑекÑа.
ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ super.prop
и super[expr]
дейÑÑвиÑелÑÐ½Ñ Ð² лÑбом опÑеделении меÑода в клаÑÑаÑ
и в лиÑеÑалаÑ
обÑекÑа.
super([arguments]); // вÑзов ÑодиÑелÑÑкого конÑÑÑÑкÑоÑа.
super.functionOnParent([arguments]);
ÐпиÑание
РконÑÑÑÑкÑоÑе клÑÑевое Ñлово super()
иÑполÑзÑеÑÑÑ ÐºÐ°Ðº ÑÑнкÑиÑ, вÑзÑваÑÑÐ°Ñ ÑодиÑелÑÑкий конÑÑÑÑкÑоÑ. ÐÑ Ð½ÐµÐ¾Ð±Ñ
одимо вÑзваÑÑ Ð´Ð¾ пеÑвого обÑаÑÐµÐ½Ð¸Ñ Ðº клÑÑÐµÐ²Ð¾Ð¼Ñ ÑÐ»Ð¾Ð²Ñ this
в Ñеле конÑÑÑÑкÑоÑа. ÐлÑÑевое Ñлово super
Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзовано Ð´Ð»Ñ Ð²Ñзова ÑÑнкÑий ÑодиÑелÑÑкого обÑекÑа.
ÐÑÐ¾Ñ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð° взÑÑ Ð¸Ð· classes sample (демонÑÑÑаÑиÑ). Ð ÑÑом пÑимеÑе super()
вÑзÑваеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð½Ðµ повÑоÑÑÑÑ ÑаÑÑи конÑÑÑÑкÑоÑа, одинаковÑе Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов Rectangle
и Square
.
class Rectangle {
constructor(height, width) {
this.name = "Rectangle";
this.height = height;
this.width = width;
}
sayName() {
console.log("Hi, I am a ", this.name + ".");
}
get area() {
return this.height * this.width;
}
set area(value) {
this._area = value;
}
}
class Square extends Rectangle {
constructor(length) {
this.height; // ReferenceError, super должен бÑÑÑ Ð²Ñзван пеÑвÑм!
// ÐдеÑÑ Ð²ÑзÑваеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ ÑодиÑелÑÑкого клаÑÑа Ñ Ð´Ð»Ð¸Ð½Ð°Ð¼Ð¸,
// ÑказаннÑми Ð´Ð»Ñ ÑиÑÐ¸Ð½Ñ Ð¸ вÑÑоÑÑ ÐºÐ»Ð°ÑÑа Rectangle
super(length, length);
// ÐÑимеÑание: в пÑоизводнÑÑ
клаÑÑаÑ
super() необÑ
одимо вÑзÑваÑÑ, пÑежде Ñем
// иÑполÑзоваÑÑ 'this'. ÐÑли ÑÑого не ÑделаÑÑ, пÑÐ¾Ð¸Ð·Ð¾Ð¹Ð´ÐµÑ Ð¾Ñибка ReferenceError.
this.name = "Square";
}
}
ÐÑзов ÑÑаÑиÑеÑкиÑ
меÑодов ÑеÑез super
ÐÑ Ñакже можеÑе вÑзÑваÑÑ super Ð´Ð»Ñ ÑÑаÑиÑеÑÐºÐ¸Ñ Ð¼ÐµÑодов.
class Rectangle {
static logNbSides() {
return "У Ð¼ÐµÐ½Ñ 4 ÑÑоÑонÑ";
}
}
class Square extends Rectangle {
static logDescription() {
return super.logNbSides() + ", ÑавнÑе Ð¼ÐµÐ¶Ð´Ñ Ñобой";
}
}
Square.logDescription(); // 'У Ð¼ÐµÐ½Ñ 4 ÑÑоÑонÑ, ÑавнÑе Ð¼ÐµÐ¶Ð´Ñ Ñобой'
Удаление ÑвойÑÑв ÑеÑез super вÑзÑÐ²Ð°ÐµÑ Ð¾ÑибкÑ
ÐÑ Ð½Ðµ можеÑе иÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ delete и super.prop
или super[expr]
Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑвойÑÑв ÑодиÑелÑÑкого клаÑÑа, он вÑдаÑÑ: ReferenceError
.
class Base {
constructor() {}
foo() {}
}
class Derived extends Base {
constructor() {}
delete() {
delete super.foo; // ÑÑо плоÑ
о
}
}
new Derived().delete(); // ReferenceError: invalid delete involving 'super'.
super.prop
не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеопÑеделÑÑÑ ÑвойÑÑва, заÑиÑÑннÑе Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñи
ÐÑи опÑеделении незапиÑÑваемÑÑ
ÑвойÑÑв Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ, напÑимеÑ, Object.defineProperty
, super
не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑезапиÑаÑÑ Ð·Ð½Ð°Ñение ÑвойÑÑва.
class X {
constructor() {
Object.defineProperty(this, "prop", {
configurable: true,
writable: false,
value: 1,
});
}
}
class Y extends X {
constructor() {
super();
}
foo() {
super.prop = 2; // Ðевозможно пеÑезапиÑаÑÑ Ð·Ð½Ð°Ñение.
}
}
var y = new Y();
y.foo(); // TypeError: "prop" доÑÑÑпен ÑолÑко Ð´Ð»Ñ ÑÑениÑ
console.log(y.prop); // 1
ÐÑполÑзование super.prop
в обÑекÑнÑÑ
лиÑеÑалаÑ
Super Ñакже можно иÑполÑзоваÑÑ Ð² обÑекÑе иниÑиализаÑоÑа / лиÑеÑала. Ð ÑÑом пÑимеÑе меÑод опÑеделÑÑÑ Ð´Ð²Ð° обÑекÑа. Ðо вÑоÑом обÑекÑе super
вÑзÑÐ²Ð°ÐµÑ Ð¼ÐµÑод пеÑвого обÑекÑа. ÐÑо ÑабоÑÐ°ÐµÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ Object.setPrototypeOf()
, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑого Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑÑÑановиÑÑ Ð¿ÑоÑоÑип Ð´Ð»Ñ obj2
в obj1
, Ñак ÑÑо super
Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð¹Ñи method1
в obj1
.
var obj1 = {
method1() {
console.log("method 1");
},
};
var obj2 = {
method2() {
super.method1();
},
};
Object.setPrototypeOf(obj2, obj1);
obj2.method2(); // вÑÐ²ÐµÐ´ÐµÑ "method 1"
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4