В чём отличие сокращенной записи метода объекта
В учебнике на странице
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, время: 15:04. |