2013-10-04 3 views
0
.. 
Class.prototype.property = function(){ 
return(this.prototypeobject.name); 
} 
.. 

oClass = new Class(); 
alert(oClass.property()); 

Это просто (или, может быть, нет?). Я просто хочу получить текущее имя объекта прототипа как String.
Примечание:this.prototypeobject.name doensn't work. Это просто пример.Javascript: Получить этот прототип имя объекта

+0

'return' не является функцией,' return this.prototypeobject.name; 'эквивалентно. – RobG

+0

@RobG Я не понимаю. Я знаю, что возврат не является функцией. Я просто хочу вернуть имя объекта Prototype как String (в моем случае «свойство»). – Sylnois

+0

Что вы ожидаете? .prototypeobject? Я никогда не слышал о таком свойстве в ['Class'] (http://api.prototypejs.org/language/Class/). – Bergi

ответ

0

Нет такой функциональности отражения. Функция не знает себя иначе, чем с помощью явной ссылки (arguments.callee устарела), а объекты функций не привязаны ни к каким свойствам, так что они не могут знать соответствующее имя свойства. Всякий раз, когда вам нужно «имя метода», hardcode это как строковый литерал.


Хорошо, есть что-то можно сделать (с помощью named function expression, вы можете изменить его в объявлении функции для IE):

Constr.prototype.someProperty = function myFuncName(args…) { 
    var propertyName = ""; 
    for (var p in this) 
     if (this[p] == myFuncName) { 
      propertyName = p; 
      break; 
     } 
    alert("this function (myFuncName) was found on property '" 
     +propertyName+"' of `this` object"); 
}; 

var inst = new Constr(…); 
inst.someProperty(…); // alerts "… found on property 'someProperty' …" 

Однако это уродливое рубить, и вы не должны используй это.