Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не выходит получить объект из функции (https://javascript.ru/forum/misc/49323-ne-vykhodit-poluchit-obekt-iz-funkcii.html)

barsix 07.08.2014 14:16

Не выходит получить объект из функции
 
Хочу чтоб при нажатии на генерируемую скриптом кнопку выводилось приветствие с именем, но объект при этом куда-то теряется, и из функции say_hello уже не удается получить имя
function main() {this.name = "Max";}
//Создает кнопку
main.prototype.create_button = function(){
var body = document.getElementsByTagName('body')[0];
var button= document.createElement("INPUT");
button.onclick = this.say_hello;
//button.onclick = hello.say_hello;//Так работает как надо
}
main.prototype.say_hello = function(){alert('hello '+this.name);}//Не работает так как this здесь возвращает вместо объекта input, при условии если функция динамически вешается на кнопку

var hello = new main();
hello.create_button();

WorM32 07.08.2014 14:24

Потому что нужно передавать контекст.
button.onclick = this.say_hello.bind(this);

tsigel 07.08.2014 14:24

function Main() {this.name = "Max";}

//Создает кнопку
Main.prototype.create_button = function(){
   var body = document.getElementsByTagName('body')[0];
   var button= document.createElement("INPUT");
   button.onclick = this.say_hello.bind(this);
   //button.onclick = hello.say_hello;//Так работает как надо
}
Main.prototype.say_hello = function(){alert('hello '+this.name);}//Не работает так как this здесь возвращает вместо объекта input, при условии если функция динамически вешается на кнопку

var hello = new Main();
hello.create_button();


Имена классов следует называть с большой буквы.

barsix 07.08.2014 14:32

Замечательно, спасибо большое, почему я до сих пор не знал про bind, отличная штука :)


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