16.09.2021, 17:24
|
|
Аспирант
|
|
Регистрация: 23.11.2013
Сообщений: 96
|
|
В чём отличие сокращенной записи метода объекта
В учебнике на странице
https://learn.javascript.ru/object-m...a-zapis-metoda
написано про сокращенную и обычную записи методов объекта:
"Нужно отметить, что эти две записи не полностью эквивалентны. Есть тонкие различия, связанные с наследованием объектов (что будет рассмотрено позже), но на данном этапе изучения это неважно. В большинстве случаев сокращённый синтаксис предпочтителен."
user = {
sayHi: function() {
alert("Привет");
}
};
// сокращённая запись выглядит лучше, не так ли?
user = {
sayHi() { // то же самое, что и "sayHi: function()"
alert("Привет");
}
};
так чем же они отличаются? Не нашёл информацию в учебнике
|
|
16.09.2021, 18:52
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
По моему никакой разницы.)
М.б. со стрелками спутали.
__________________
29375, 35
|
|
16.09.2021, 19:50
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от lgick
|
Не нашёл информацию в учебнике
|
Я ее не нашел и в других местах...
|
|
17.09.2021, 10:41
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Вот же нахуевертили в моём js.
Вот почему super нельзя юзать в свойствах-функциях, т.к. они "не привязаны к [[HomeObject]]", но если ты вдруг используешь новомодные приватные переменные(this.#var) - это таки без проблем привяжет функцию к конкретному классу?..
__________________
29375, 35
|
|
17.09.2021, 23:14
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Сообщение от Aetae
|
но если ты вдруг используешь новомодные приватные переменные(this.#var) - это таки без проблем привяжет функцию к конкретному классу?
|
Что имеется в виду?
|
|
17.09.2021, 23:59
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
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
|
|
18.09.2021, 10:07
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Сообщение от Aetae
|
Так нельзя, потому что функция не привяжется к А:
|
class A {
s = function() {
super.method()
}
}
Так нельзя просто потому, что это вызывает СИНТАКСИЧЕСКУЮ ошибку
|
|
18.09.2021, 10:29
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Сообщение от 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
А в примере с приватными членами при попытке перенести что то просто не будет работать - вылетит с ошибкой.
|
|
18.09.2021, 10:42
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Суть в том что раз она вылетает с ошибкой, то она знает что оказалась где-то не там. А вся суть ошибки с super в том, что она типа не может знать.
Неконсистентность. Оно должно или в обоих случаях вылетать на этапе декларирования, или в обоих случаях вылетать при попытке перетасовать. Имеем же то что super нельзя декларировать в function - упадёт, но можно перетасовать метод и он сохранит привязку, а приватные свойства можно декларировать в function, но зато при перетасовке упадёт. Противно как-то.
__________________
29375, 35
Последний раз редактировалось Aetae, 18.09.2021 в 10:51.
|
|
|
|