Показать сообщение отдельно
  #18 (permalink)  
Старый 29.01.2021, 23:45
Аспирант
Отправить личное сообщение для denis_alekss Посмотреть профиль Найти все сообщения от denis_alekss
 
Регистрация: 01.12.2020
Сообщений: 55

Немного другая версия этого же случая:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
Function.prototype.bind = function(context) {
   var fn = this;
   return function() {
      return fn.apply(context, arguments);
   };
}
var HelloPage = {
   name: 'Вася!!!',
   init: function() {
      alert('Hello, ' + this.name);
   }
}
window.onload = HelloPage.init.bind(HelloPage); 
</body>
</html>


Если поменять эту строку:
Function.prototype.bind

на
Function.prototype.call

разницы при выводе не происходит.

Если поменять эту строку:
window.onload = HelloPage.init.bind(HelloPage);

на
window.onload = HelloPage.init.apply(HelloPage);

Также вывод одинаковый.

В этом месте также используется замыкание
Function.prototype.call = function(context) {
   return function() {
      return this.apply(context, arguments);
   };
}

Здесь this ссылается на объект HelloPage благодаря функции call или bind если указать в строке Function.prototype.bind? Можно ли обойтись в этом коде для получения идентичного результата без замыканий если я хочу вызвать метод объекта передав свойство Петя с этого же объекта в метод?

Последний раз редактировалось denis_alekss, 29.01.2021 в 23:55.
Ответить с цитированием