bind
метод создает новую функцию, которая при вызове имеет ключевое слово this
, установленное на предоставленное значение.
var obj = {
a: 0,
b() {
console.log(this.a);
}
}
obj.b() // -> 0
var functionBound = obj.b.bind(obj)
functionBound() // -> 0
functionBound.bind(null)() // -> 0 AND I expect an error here
Ясно, что я не могу повторить попытку, функция уже отскочила. Однако я не мог найти никакой документации по этому поведению.
Цитата из "Привязать больше аргументов уже связанной функции в Javascript"
Как только вы привязали объект к функции со связыванием, вы не можете ее переопределить. Он четко написан в спецификациях, как вы можете видеть в документации MDN:
Функция bind() создает новую функцию (связанную функцию) с тем же самым телом функции (внутреннее свойство вызова в терминах ECMAScript 5) в качестве функции, на которую она вызывается (функция целевой функции привязки), с этим значением связанный с первым аргументом bind(), который нельзя переопределить.
Я не мог найти их в документации MDN. Я сделал точный полнотекстовый поиск по приведенной выше цитате в Google и кажется, что ответ SO выше - единственный источник такого поведения. Я также пытаюсь найти ответ в спецификации языка без везения.
Мой вопрос: знаете ли вы это поведение и где я могу найти официальную документацию по этим вопросам?