Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2014, 14:16
Новичок на форуме
Отправить личное сообщение для barsix Посмотреть профиль Найти все сообщения от barsix
 
Регистрация: 07.08.2014
Сообщений: 2

Не выходит получить объект из функции
Хочу чтоб при нажатии на генерируемую скриптом кнопку выводилось приветствие с именем, но объект при этом куда-то теряется, и из функции 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();
Ответить с цитированием
  #2 (permalink)  
Старый 07.08.2014, 14:24
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Потому что нужно передавать контекст.
button.onclick = this.say_hello.bind(this);
Ответить с цитированием
  #3 (permalink)  
Старый 07.08.2014, 14:24
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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();


Имена классов следует называть с большой буквы.
Ответить с цитированием
  #4 (permalink)  
Старый 07.08.2014, 14:32
Новичок на форуме
Отправить личное сообщение для barsix Посмотреть профиль Найти все сообщения от barsix
 
Регистрация: 07.08.2014
Сообщений: 2

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевернулся мир в моей голове. pshcolnyy Общие вопросы Javascript 3 17.07.2014 08:32
Объект на основе функции Sergey_New Общие вопросы Javascript 22 28.05.2014 09:24
ссылка на объект в функции hotcooler17 Общие вопросы Javascript 4 10.04.2011 14:40
Как из ссылки на объект получить родительский объект FINoM Общие вопросы Javascript 3 03.03.2011 16:27
Можно ли получить объект без названия SunnyDay Общие вопросы Javascript 5 25.02.2010 19:26