09.10.2014, 19:01
|
|
Аспирант
|
|
Регистрация: 23.05.2012
Сообщений: 44
|
|
Название вызвавшего свойства
привет всем )
у меня есть объект:
var o = new Object();
к нему может добавиться произвольное количество свойств формата:
o.func24 = function(){
/* some code here */
}
вопрос: как мне при вызове свойства:
o.func24();
получить название исполняемого свойства (" func24")?
очерёдность, варианты и количество свойств может меняться постоянно.
P.S. смог найти только вывод всего списка свойств ( Object.keys(o)).
Но это не то… помогите плз.
|
|
09.10.2014, 19:10
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
|
|
09.10.2014, 19:15
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от max0n
|
P.S. смог найти только вывод всего списка свойств (Object.keys(o)).
|
Потому что .keys(o) метод, а не свойство.
|
|
09.10.2014, 19:20
|
Профессор
|
|
Регистрация: 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();
|
|
09.10.2014, 21:16
|
|
Аспирант
|
|
Регистрация: 23.05.2012
Сообщений: 44
|
|
tsigel,
а если у меня 100 свойств... мне к каждому прописывать полностью функцию?
могу я както скопировать функцию?
чтото типо:
o.func2 = o.func1();
|
|
09.10.2014, 21:31
|
Профессор
|
|
Регистрация: 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")
|
|
09.10.2014, 22:06
|
|
Аспирант
|
|
Регистрация: 23.05.2012
Сообщений: 44
|
|
ну... у меня постепенный запуск анимации на сайте.
загружается страница....
на ней подгружаются блоки с анимацией.
Каждый раз разное количество.
как только браузер докрутил до блока, запускается функция, названная как ID блока, который виден.
Анимация запускается и удаляется свойство, чтобы не запускалось до перезагрузки страницы.
|
|
09.10.2014, 22:31
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от max0n
|
а если у меня 100 свойств... мне к каждому прописывать полностью функцию?
|
В js вместо наследований предусмотрен prototype. Мне вот эта статья показалась самой доходчивой. http://yehudakatz.com/2011/08/12/und...in-javascript/
|
|
09.10.2014, 22:34
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от max0n
|
Каждый раз разное количество.
|
И обязательно давать всем кадрам уникальное имя чтобы ... я не знаю что.
Ну не колется народ и все. Будет мучиться (я в третьем лице), страдать, ничего не решит, плюнет, или нагородит колхоза, но никогда не расскажет что хочет сделать, что получается и как оно должно быть по замыслу.
Это типа западло что ли считается у нас?
|
|
09.10.2014, 22:38
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Допустим запускается анимация, у каждого кадра свои характеристики: ширина, высота, куда двигать, какой эффект, своя подпись и все такое. Угадал? От вас же не дождешься.
Значит все данные есть, надо только закатать их в массив для js. Ну так и закатывайте. По индексу. То есть у вас будет не объект с кучей методов, а массив с кучей объектов и 1 методом. Который будет хавать проперти и делать из то, что предусмотрено интерфейсом.
Ну типа у вас будет аниматабле интерфейс. Есть итерабле, коунтабле, компарабле и прочие абле, а у вас - аниматабле.
|
|
|
|