Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Баг? a-a-a!!! (https://javascript.ru/forum/misc/53846-bag.html)

kotlov-net 20.02.2015 22:48

Решено ___________________
 
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 решено

Aetae 20.02.2015 23:00

Да. Именно так работает 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

caetus 20.02.2015 23:44

успокойся
сделать так и все будет работать

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

kotlov-net 20.02.2015 23:49

Aetae,
Вообще то да, Вы правы, это я туплю, на ночь глядя. Все правильно работает, так и должно быть. Сорри, спасибо еще раз:)

kotlov-net 20.02.2015 23:50

caetus,
Да, это я знаю, спасибо.


Часовой пояс GMT +3, время: 18:31.