Почему методы копируются по значению?! Это же функции
'use strict';
var a = {
m() {console.log('hello')}
};
var b = a.m;
a.m = null;
b();
Ответы (2 шт):
Автор решения: Vadim
→ Ссылка
По сути Объект это коробка, в которую можно всё что угодно класть и брать
let a = {
m:()=>{console.log('hello');}
};
// m = Семечко
// a = Яблоко (с Семечкой)
const b = a.m; // к Б присваиваешь Семечку
a = null; // Яблоко с Семечкой удаляешь
b(); // Семечка
'use strict'; и var - означают старые стандарты
Автор решения: Alex Krass
→ Ссылка
Они копируются по ссылке и если вы скопировали ссылку на метод а var b = a.m;, то занулив ссылку у a.m, сам метод никуда не делся и у вас осталась ссылка на него в b.
'use strict';
var a = {
m() {console.log('hello')}
};
var b = a.m;
//меняем переменную у a.m, по значению не должен изменить b
a.m.test = "10";
//один и тот же объект, следовательно копирование было не по значению
console.log(b.test);