Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.09.2021, 17:24
Аватар для lgick
Аспирант
Отправить личное сообщение для lgick Посмотреть профиль Найти все сообщения от lgick
 
Регистрация: 23.11.2013
Сообщений: 96

В чём отличие сокращенной записи метода объекта
В учебнике на странице

https://learn.javascript.ru/object-m...a-zapis-metoda

написано про сокращенную и обычную записи методов объекта:

"Нужно отметить, что эти две записи не полностью эквивалентны. Есть тонкие различия, связанные с наследованием объектов (что будет рассмотрено позже), но на данном этапе изучения это неважно. В большинстве случаев сокращённый синтаксис предпочтителен."

user = {
  sayHi: function() {
    alert("Привет");
  }
};

// сокращённая запись выглядит лучше, не так ли?
user = {
  sayHi() { // то же самое, что и "sayHi: function()"
    alert("Привет");
  }
};



так чем же они отличаются? Не нашёл информацию в учебнике
Ответить с цитированием
  #2 (permalink)  
Старый 16.09.2021, 18:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

По моему никакой разницы.)
М.б. со стрелками спутали.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 16.09.2021, 19:50
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от lgick
Не нашёл информацию в учебнике
Я ее не нашел и в других местах...
Ответить с цитированием
  #4 (permalink)  
Старый 17.09.2021, 06:51
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

lgick,
Во втором случае тебе будет доступен super внутри твоего метода.
https://learn.javascript.ru/es-object#super
Ответить с цитированием
  #5 (permalink)  
Старый 17.09.2021, 10:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Сообщение от destus Посмотреть сообщение
lgick,
Во втором случае тебе будет доступен super внутри твоего метода.
https://learn.javascript.ru/es-object#super
Вот же нахуевертили в моём js.
Вот почему super нельзя юзать в свойствах-функциях, т.к. они "не привязаны к [[HomeObject]]", но если ты вдруг используешь новомодные приватные переменные(this.#var) - это таки без проблем привяжет функцию к конкретному классу?..
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 17.09.2021, 23:14
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Сообщение от Aetae
но если ты вдруг используешь новомодные приватные переменные(this.#var) - это таки без проблем привяжет функцию к конкретному классу?
Что имеется в виду?
Ответить с цитированием
  #7 (permalink)  
Старый 17.09.2021, 23:59
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

voraa,
Так можно, и функция намертво привяжется к A:
class A {  
  #private = 'ok'
  s = function() {
    console.log(this.#private)
  }
}

Так нельзя, потому что функция не привяжется к А:
class Parent {
  method() {
    console.log('ok')
  }
}
class A {  
  s = function() {
    super.method()
  }
}


Видать разные ребята говняли.
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 18.09.2021, 10:07
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Сообщение от Aetae
Так нельзя, потому что функция не привяжется к А:
class A { 
  s = function() {
    super.method()
  }
}

Так нельзя просто потому, что это вызывает СИНТАКСИЧЕСКУЮ ошибку
Ответить с цитированием
  #9 (permalink)  
Старый 18.09.2021, 10:29
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Сообщение от Aetae
Так можно, и функция намертво привяжется к A:
Я бы не назвал это привязкой. Привязкой можно считать ситуацию, когда функцию переносят в другой класс, а она продолжает работать так, как будто она в исходном
Ну типа
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


А в примере с приватными членами при попытке перенести что то просто не будет работать - вылетит с ошибкой.
Ответить с цитированием
  #10 (permalink)  
Старый 18.09.2021, 10:42
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Суть в том что раз она вылетает с ошибкой, то она знает что оказалась где-то не там. А вся суть ошибки с super в том, что она типа не может знать.
Неконсистентность. Оно должно или в обоих случаях вылетать на этапе декларирования, или в обоих случаях вылетать при попытке перетасовать. Имеем же то что super нельзя декларировать в function - упадёт, но можно перетасовать метод и он сохранит привязку, а приватные свойства можно декларировать в function, но зато при перетасовке упадёт. Противно как-то.
__________________
29375, 35

Последний раз редактировалось Aetae, 18.09.2021 в 10:51.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление метода к переменной с помощью записи «через точку»? nathan111777 Общие вопросы Javascript 1 24.08.2019 17:03
В чем отличие bind от call и apply? platedz Events/DOM/Window 11 08.04.2013 07:24
Чем отличается составной оператор от литерала объекта? rgl Общие вопросы Javascript 10 26.02.2013 22:38
О чем говорят записи в таком виде?{} 0931454574 Серверные языки и технологии 7 13.05.2011 11:59
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57