Почему в данном примере, при вызове
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(); //привязка к глобальному объекту