Решено ___________________
name="global" someObject={ name: "someObject", test: function(){alert(this.name)} } o=function(object){ return function(arg){ return object[arg] } }(someObject) someObject.test() o("test")() //>>>> someObject //>>>> global Почему this во втором случае связывается с глобальным объектом? Это разве логично? UPD решено |
Да. Именно так работает js. Откуда функцию вызовешь - такой this и будет, что весьма удобно.
function func(){ alert(this) } var obj1 = { toString: function(){return '[object Obj1]'}, func : func } var obj2 = { toString: function(){return '[object Obj2]'}, func: func, obj1: obj1 } func() //Window ибо равносильно window.func() obj1.func() //Obj1 obj2.func() //Obj2 obj2.obj1.func() //Obj1 |
успокойся
сделать так и все будет работать name="global" someObject={ name: "someObject", test: function(){alert(this.name)} } o=function(object){ return function(arg){ if(!arg) return; return object[arg]() } }(someObject); someObject.test() o("test") //>>>> someObject //>>>> global |
Aetae,
Вообще то да, Вы правы, это я туплю, на ночь глядя. Все правильно работает, так и должно быть. Сорри, спасибо еще раз:) |
caetus,
Да, это я знаю, спасибо. |
Часовой пояс GMT +3, время: 11:48. |