Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » JS OOP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть функция, создающая объект.
 

Код:
 
var object = function () {
   var prop1
   var prop2
 
   function method1(a) {
      return this.prop1 // работает
   }
 
   function method2(e) {
      e=e||window.event
      return this.prop1 // не работает
   }
}
 

 
Как видите, method2 получает событие, из-за чего к this присваивается объект, который его вызывал.
Как же обратиться к свойству, если даже object.prop1 не работает??

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 01:09 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1
есть же вопросы по javascript
 

Цитата:
из-за чего к this присваивается объект, который его вызывал

кого "его"? как вызывается method2?

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 01:47 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
 кого "его"? как вызывается method2?

"Его" - это событие.
 

Код:
function(element){
    element.onmousedown = method2
}

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:07 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
function(element){  
    element.onmousedown = method2  
}

и с чего вы решили, что это должно сработать??
 
такого метода нет, он приватный метод объекта

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:09 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так все работает.
Этот метод тоже в объекте.
 
Не работает только вызов свойства.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:13 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Этот метод тоже в объекте.  

я же просил - пишите все сразу, ну почему нужно вытягивать по чуть чуть.
 

Цитата:
element.onmousedown = method2  

this, в данном случае, не объект, а element, скорее всего.
 
console.log(this) и посмотрите, что это.

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:18 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
var object = function () {
   var prop1
   var prop2
 
   function method1(a) {
      return this.prop1 // работает
   }
 
   function method2(e) {
      e=e||window.event
      return this.prop1 // не работает
   }
 
   return {
      start: function(element){
      element.onmousedown = method2
   }
}
 
var o=new object()
o.start($('#123')[0])
 

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:19 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
this, в данном случае, не объект, а element, скорее всего.  

проверил, так и есть. this это DOM элемент.  
 
более того, у вас там такая мешанина, что советую продумать сначала, что именно вы хотите добиться.
 element.onmousedown = method2 - цепляет метод без привязки к какому либо объекту вообще, поэтому и свойства определенного вы получить не сможете.

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:30 02-06-2015 | Исправлено: Mavrikii, 02:31 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
это DOM элемент

Я это и имел в виду.
 
Так как тогда в данном методе (method2) обратиться к свойству?

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:33 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Так как тогда в данном методе (method2) обратиться к свойству?

 
опишите, сначала, зачем это нужно - может подход изначально неправильный

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:37 02-06-2015 | Исправлено: Mavrikii, 02:51 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
  element.onmousedown = method2 - цепляет метод без привязки к какому либо объекту вообще, поэтому и свойства определенного вы получить не сможете.

Почему это без привязки? Передается событие объекта. Или вы имеете в виду передавать объект в аргументах?
 
Добавлено:

Цитата:
 опишите, сначала, зачем это нужно - может подход изначально неправильный  

В этом методе мне надо использовать значение свойства, которое задавалось экземпляром объекта.
 

Код:
 
var o=new object()
o.prop1='val'
o.start($('#123')[0])  
 

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:37 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Почему это без привязки? Передается событие объекта.

у объекта нет событий, есть методы.
 
в любом случае, в таком виде this это не объект.
да и обращаетесь к переменной неправильно -  

Цитата:
      return this.prop1 // не работает  

уберите this. вообще, так как prop1 и prop2 уже в области видимости и не являются приватными элементами
 
http://jsfiddle.net/yexyz18q/

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:43 02-06-2015 | Исправлено: Mavrikii, 02:45 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 уберите this. вообще

Уже пробовал. Так тоже не работает.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:45 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Уже пробовал. Так тоже не работает.

http://jsfiddle.net/yexyz18q/

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:45 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может из-за того что я назвал свойство словом type.
 
Добавлено:
Нет, вообще-то не работает если присвоить значение свойству экземпляром класса.
 

Код:
var o=new object()
o.prop1='val'
o.start($('#123')[0])  

 
Результат: undefined

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:48 02-06-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Нет, вообще-то не работает если присвоить значение свойству экземпляром класса

и не даст, потому что свойство приватное - ну посмотрите учебник по основам ООП
 
http://jsfiddle.net/yexyz18q/1/

Всего записей: 15115 | Зарегистр. 20-09-2014 | Отправлено: 02:57 02-06-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
А я не знал что оно приватное).
Большое спасибо.)

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 02:59 02-06-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » JS OOP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru