В чём отличие сокращенной записи метода объекта
В учебнике на странице
https://learn.javascript.ru/object-m...a-zapis-metoda написано про сокращенную и обычную записи методов объекта: "Нужно отметить, что эти две записи не полностью эквивалентны. Есть тонкие различия, связанные с наследованием объектов (что будет рассмотрено позже), но на данном этапе изучения это неважно. В большинстве случаев сокращённый синтаксис предпочтителен."
user = {
sayHi: function() {
alert("Привет");
}
};
// сокращённая запись выглядит лучше, не так ли?
user = {
sayHi() { // то же самое, что и "sayHi: function()"
alert("Привет");
}
};
так чем же они отличаются? Не нашёл информацию в учебнике |
По моему никакой разницы.)
М.б. со стрелками спутали. |
Цитата:
|
lgick,
Во втором случае тебе будет доступен super внутри твоего метода. https://learn.javascript.ru/es-object#super |
Цитата:
Вот почему super нельзя юзать в свойствах-функциях, т.к. они "не привязаны к [[HomeObject]]", но если ты вдруг используешь новомодные приватные переменные(this.#var) - это таки без проблем привяжет функцию к конкретному классу?.. |
Цитата:
|
voraa,
Так можно, и функция намертво привяжется к A:
class A {
#private = 'ok'
s = function() {
console.log(this.#private)
}
}
Так нельзя, потому что функция не привяжется к А:
class Parent {
method() {
console.log('ok')
}
}
class A {
s = function() {
super.method()
}
}
Видать разные ребята говняли. |
Цитата:
class A {
s = function() {
super.method()
}
}
Так нельзя просто потому, что это вызывает СИНТАКСИЧЕСКУЮ ошибку |
Цитата:
Ну типа
class P1 {
out () {console.log ('P1')}
}
class P2 {
out () {console.log ('P2')}
}
class P3 {
out () {console.log ('P3')}
}
class A extends P1{
out () {super.out()}
}
let a = new A()
a.out() // P1
class B extends P2{
out = a.out // перенесли так
}
let b = new B()
b.out() //P1
class C extends P3{
}
C.prototype.out = A.prototype.out // или так
let c = new C()
c.out() //P1
А в примере с приватными членами при попытке перенести что то просто не будет работать - вылетит с ошибкой. |
Суть в том что раз она вылетает с ошибкой, то она знает что оказалась где-то не там. А вся суть ошибки с super в том, что она типа не может знать.
Неконсистентность. Оно должно или в обоих случаях вылетать на этапе декларирования, или в обоих случаях вылетать при попытке перетасовать. Имеем же то что super нельзя декларировать в function - упадёт, но можно перетасовать метод и он сохранит привязку, а приватные свойства можно декларировать в function, но зато при перетасовке упадёт. Противно как-то. |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 21:39. |