Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2014, 19:01
Аватар для max0n
Аспирант
Отправить личное сообщение для max0n Посмотреть профиль Найти все сообщения от max0n
 
Регистрация: 23.05.2012
Сообщений: 44

Название вызвавшего свойства
привет всем )

у меня есть объект:
var o = new Object();

к нему может добавиться произвольное количество свойств формата:
o.func24 = function(){
/* some code here */
}

вопрос: как мне при вызове свойства:
o.func24();

получить название исполняемого свойства ("func24")?
очерёдность, варианты и количество свойств может меняться постоянно.

P.S. смог найти только вывод всего списка свойств (Object.keys(o)).
Но это не то… помогите плз.
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2014, 19:10
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Тут вроде рассказано http://www.seifi.org/javascript/java...arguments.html
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2014, 19:15
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от max0n
P.S. смог найти только вывод всего списка свойств (Object.keys(o)).
Потому что .keys(o) метод, а не свойство.
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2014, 19:20
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

max0n,
Либо писать в методы именованные функции. и забирать имя через arguments.callee.name,
Либо перебором.

Вариант 1:
var o = {
  
  func1: function func1() {
    alert(arguments.callee.name);
  },
  func2: function func2() {
    alert(arguments.callee.name);
  }
   
}
o.func1();
o.func2();

Вариант 2:
var o = {
  
  func1: function func1() {
    for (var name in this) {
      if (this[name] === arguments.callee) {
        alert(name);
      }
    }
  },

  func2: function func1() {
    for (var name in this) {
      if (this[name] === arguments.callee) {
        alert(name);
      }
    }
  }
   
}
o.func1();
o.func2();
Ответить с цитированием
  #5 (permalink)  
Старый 09.10.2014, 21:16
Аватар для max0n
Аспирант
Отправить личное сообщение для max0n Посмотреть профиль Найти все сообщения от max0n
 
Регистрация: 23.05.2012
Сообщений: 44

tsigel,
а если у меня 100 свойств... мне к каждому прописывать полностью функцию?
могу я както скопировать функцию?
чтото типо:

o.func2 = o.func1();
Ответить с цитированием
  #6 (permalink)  
Старый 09.10.2014, 21:31
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Скопировать функции можно, но то что вы хотите выглядит очень неправильным. Может быть вы расскажете зачем вам это понадобилось и как добавляются функции в объект и тогда можно придумать более правильное решение?

Например на вскидку сделать объекту метод для вызова функций, который бы вызывал функцию и пихал бы ей имя ключа первым аргументом, тогда и париться не надо. Например:

var o = {
  
  func1: function func1(name) {
    alert(name);
  },

  func2: function func1(name) {
    alert(name);
  },

  call: function (name) {
    this[name](name);
  }
   
}
o.call("func1");
o.call("func2")
Ответить с цитированием
  #7 (permalink)  
Старый 09.10.2014, 22:06
Аватар для max0n
Аспирант
Отправить личное сообщение для max0n Посмотреть профиль Найти все сообщения от max0n
 
Регистрация: 23.05.2012
Сообщений: 44

ну... у меня постепенный запуск анимации на сайте.
загружается страница....
на ней подгружаются блоки с анимацией.
Каждый раз разное количество.
как только браузер докрутил до блока, запускается функция, названная как ID блока, который виден.

Анимация запускается и удаляется свойство, чтобы не запускалось до перезагрузки страницы.
Ответить с цитированием
  #8 (permalink)  
Старый 09.10.2014, 22:31
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от max0n
а если у меня 100 свойств... мне к каждому прописывать полностью функцию?
В js вместо наследований предусмотрен prototype. Мне вот эта статья показалась самой доходчивой. http://yehudakatz.com/2011/08/12/und...in-javascript/
Ответить с цитированием
  #9 (permalink)  
Старый 09.10.2014, 22:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от max0n
Каждый раз разное количество.
И обязательно давать всем кадрам уникальное имя чтобы ... я не знаю что.

Ну не колется народ и все. Будет мучиться (я в третьем лице), страдать, ничего не решит, плюнет, или нагородит колхоза, но никогда не расскажет что хочет сделать, что получается и как оно должно быть по замыслу.

Это типа западло что ли считается у нас?
Ответить с цитированием
  #10 (permalink)  
Старый 09.10.2014, 22:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Допустим запускается анимация, у каждого кадра свои характеристики: ширина, высота, куда двигать, какой эффект, своя подпись и все такое. Угадал? От вас же не дождешься.

Значит все данные есть, надо только закатать их в массив для js. Ну так и закатывайте. По индексу. То есть у вас будет не объект с кучей методов, а массив с кучей объектов и 1 методом. Который будет хавать проперти и делать из то, что предусмотрено интерфейсом.

Ну типа у вас будет аниматабле интерфейс. Есть итерабле, коунтабле, компарабле и прочие абле, а у вас - аниматабле.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение css свойства Rumis jQuery 2 21.05.2013 11:55
Как то можно узнать ID HTML элемента вызвавшего JavaScript функцию? Opusel Events/DOM/Window 1 18.12.2011 18:36
Получить все свойства как строку. boilroom Events/DOM/Window 1 20.06.2011 17:37
Как получить название композиции из Windows Mepia Plyaer alx99 Javascript под браузер 1 18.02.2011 16:21
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57