2015-08-05 3 views
0

У меня есть некоторые трудности с получением имени методы, хранящейся в переменном ... Вот Exemple того, что я хочу:Получить имя методы, хранящейся в переменной

Function MyObject(){ 
    this.actualMethod = this.thatName; 
} 

MyObject.prototype.thatName = function(){} 

MyObject.prototype.getActualMethodName = function(){ 
    return this.actualMethod.name; /* This doesn't work since the function itself is anonymous, so this.actualMethod.name doesn't work... I want it to return "thatName" */ 
} 

Я пытался пройдите через прототип с моей консолью, напрасно ... Есть ли способ сделать это?

+0

В чем проблема? Просто 'return this.actualMethod;' – hindmost

ответ

2

Вы должны назвать функцию:

MyObject.prototype.thatName = function thatName() {}; 

Или, как вы упомянули, вы можете найти свое имя в прототипе (но я бы не советовал вам это сделать):

for (var key in MyObject.prototype) { 
    if (MyObject.prototype[key] === this.actualMethod) { 
    return key; 
    } 
} 

Но зачем это нужно? Может быть, может быть лучшее решение.

+0

Называет функцию (решение 1) хорошей практикой? Я никогда не видел этого раньше ... Но второе решение, похоже, работает =)! Я не знал, что можно просто повторить так, как это ... Кажется, это так просто! – MetalFoxDoS

+0

Я работаю над проектом, связанным с манипулированием квадратами на холсте. «Onmousedown», я выбираю метод вызова («move», «resize» ...) с положением мыши рядом с квадратом. «Onmousemove», вызывается выбранный метод (если мышь все еще нажата), поэтому мне нужно сохранить его в переменной («this.actualMethod»), чтобы вызвать его onmousemove. «Onmouseup», я хочу вызвать функцию обратного вызова. У меня есть ряд функций, которые выглядят так: {'move': function() {/ * dostuff * /}, 'resize': function {/ * otherstuff * /}}. Ключом каждой функции является выбранное имя функции, поэтому мне нужно ее получить. – MetalFoxDoS

+0

Ну, если вам почему-то нужно имя, это хорошая практика. Но это не работает в IE. Но вы не могли бы просто вернуть фактическую функцию, как предложил @hindmost, а затем просто назвать ее? – Razem

Смежные вопросы