Задать вопрос
Muranx
@Muranx
кто понял this тот в цирке не смеётся

Непонятная сущность! this (определение контекста вызова), почему при определённом вызове получается undefined?

Почему в данном примере, при вызове ass.myBind(0) или ass.myBind(false) возвращается undefined?

Ведь это значения , которые интерпретируются как false и попадая в конструкцию fn.call(!this?this:obj) по идее должно получиться (true?this:obj) - жирным выделено то, что должно вернуться результатом, Т.Е. если возвращается this будет выполнена привязка по умолчанию т.е. объект window(учитывая то, в каком месте функция вызывается). И к тому-же, если вызывать ass.myBind(unefined) и ass.myBind(null) то привзяка по умолчанию работает (т.е привязка к глобальному объекту)!
Function.prototype.myBind=function(obj){
  fn=this
    bound=function(){
        return fn.call(!this ? this : obj)
    }
    return bound
};

var a="Привязка к глобальному объекту по умолчанию",
    b={a:"Свойство 'а' из объекта b"},
    c={a:"Свойство 'а' из объекта с"},
    f //просто переменная для теста, т.к. у нее нет значения, значит она undefined
      //и соотвественно при передачи её аргументом ass.myBind(f) привязка идёт к
      //window

function ass(){
  document.write(this.a);
};

var fart = ass.myBind();

fart(); //привязка к глобальному объекту
  • Вопрос задан
  • 235 просмотров
Подписаться 1 Средний 10 комментариев
Решения вопроса 1
@dyus1
// TODO
При передаче undefined или null в качестве контекста, контекст сбрасывается на глобальный (window). При передаче в качестве контекста 0 или false, контекст ссылается на объект Number или Boolean соответственно. Так как на этих объектах не определено свойство "a", соответственно возвращается undefined.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы