@AlphaDMQ

При одалживании метода объект живет или выпиливается?

...
arguments.join = [].join;
...
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Во-первых вы не отдалживаете метод, а получаете на него ссылку. Во-вторых ссылка на метод, в вашем случае, находится не в самом объекте, а является свойством прототипа. В-третьих в JavaScript объекты удаляются по принципу достижимости. Если на объект нет ни одной ссылки, то занимаемая им память будет очищена при первой же возможности. Если же на объект есть ссылки, то это еще не гарантия, что память не будет очищена.
Например:
let foo = {};
let bar = {};
foo.barLink = bar;
bar.fooLink = foo;

foo = bar = null;


На объекты есть ссылки barLink и fooLink, но они недостижимы, ведь мы не можем обратиться к этим свойствам, после того как переназначили переменные foo и bar,. Поэтому память занимаемая объектами будет очищена, несмотря на наличие ссылок.

Ваш массив будет уничтожен сборщиком мусора сразу же после выполнения строки в которой используется.

Другое дело, если мы сначала забиндим метод на наш объект:
class Person {
  constructor(name) {
    this.name = name;
  }
  printName() {
    console.log(this.name);
  }
}

let john = new Person('John');
const obj = {};

obj.printJohnName = john.printName.bind(john);
john = null;

obj.printJohnName();  // 'John'

Объект ранее доступный по ссылке john не будет удален, так как мы забиндили на него функцию и в ней есть скрытое свойство [[BoundThis]], ссылающееся на него:
5a84af46ab784660788834.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
от 30 000 до 65 000 руб.
MedPoint24 Москва
от 100 000 руб.
MERA Нижний Новгород
До 150 000 руб.
22 окт. 2018, в 02:30
12000 руб./за проект
22 окт. 2018, в 02:01
10000 руб./за проект
21 окт. 2018, в 22:38
1200 руб./за проект