Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Присвоение метода объекта функции (https://javascript.ru/forum/misc/56591-prisvoenie-metoda-obekta-funkcii.html)

Casufi 24.06.2015 11:14

Присвоение метода объекта функции
 
Вот пример
http://dojo.telerik.com/@casufi/itAte
Не могу понять как работает кусок кода function onChange(e)
Почему как только я присваиваю метод переменной, она теряет область видимости ?
Кусок кода
var handler = e.sender.text;
handler("changed2");
Не работает.
Можно ли метод объекта и сам объект передать функции в качестве входящих параметров и выполнить метод в контексте объекта ?

ksa 24.06.2015 11:26

Цитата:

Сообщение от Casufi
Можно ли метод объекта и сам объект передать функции в качестве входящих параметров и выполнить метод в контексте объекта ?

Метод не передашь. :no:
А вот ссылку на объект - запросто!
var obj={
	name: 'Вася',
	method: function(){
		alert(this.name);
	}
};
test(obj);
function test(Obj){
	Obj.method();
};

Casufi 24.06.2015 11:30

Проблема в том, что в функции я не знаю какой метод у объекта я должен выполнить, мне нужно каким то образом в функцию передать 1 - сам обхект 2 - какой метод выполнить.

Casufi 24.06.2015 11:35

Вроде нашел https://learn.javascript.ru/bind

ksa 24.06.2015 11:56

Цитата:

Сообщение от Casufi
я не знаю какой метод у объекта я должен выполнить, мне нужно каким то образом в функцию передать 1 - сам обхект 2 - какой метод выполнить

Дык!

var obj={
	name: 'Вася',
	method: function(){
		alert(this.name);
	}
};
test(obj,'method');
function test(Obj,Method){
	Obj[Method]();
};

Casufi 24.06.2015 12:30

Цитата:

Сообщение от ksa (Сообщение 376384)
Дык!

var obj={
	name: 'Вася',
	method: function(){
		alert(this.name);
	}
};
test(obj,'method');
function test(Obj,Method){
	Obj[Method]();
};

Или так, тогда передавать можно только метод
var execmethod = function(method){
    method();
}
var obj={
	name: 'Вася',
	method: function(){
		alert(this.name);
	}
};

execmethod(function(){obj.method()});

рони 24.06.2015 12:42

Casufi,
:blink:
var obj={
	name: 'Вася',
	method: function(){
		alert(this.name);
	}
};
test(obj.method.bind(obj));
function test(Method){
	Method();
};


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