Немного другая версия этого же случая:
<!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? Можно ли обойтись в этом коде для получения идентичного результата без замыканий если я хочу вызвать метод объекта передав свойство Петя с этого же объекта в метод?