2012-04-13 5 views
1

моя проблема здесь, что я не понимаю, как делает метод, называемый «objectchanger» работает здесь является источникомПередача по ссылке в JavaScript (вызываем метод)

function test() 
{ 
    this.value=5; 
} 

test.prototype.Add=function() 
{ 
    this.value++; 
}; 

var obj = new test(); 

obj.Add(); 

alert(obj.value); 


function objectchanger(fnc, obj) 
{ 
    fnc.call(obj); 
    //obj.fnc(); >> without this line of code it works fine but why????? 
    //why i don't need to write this code -- 
} 

objectchanger(obj.Add, obj); 
alert(obj.value); // the value is now 7 

ответ

1

call является метод на Function объекта , Он вызывает функцию с переданным объектом в качестве значения this в функции. См. MDN docs по вызову.

Так что, когда objectchanger называет fnc.call(obj), он звонит test.prototype.Add.call(obj), который является таким же, как вызов obj.Add().

0

Когда объект «this» доступен в функции javascript, он берет его из текущего исполняемого контекста. Передавая «obj» в методе вызова, «этот» объект внутри функции устанавливается в переданный объект.

Смежные вопросы