0
..
Class.prototype.property = function(){
return(this.prototypeobject.name);
}
..

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

这很简单(或者可能不是?)。我只想将当前原型对象名称作为字符串。
注意: this.prototypeobject.name不起作用。这只是一个例子。

4

1 回答 1

0

没有这样的反射功能。除了显式引用(已弃用)之外,函数不知道自己arguments.callee,并且函数对象无论如何都不会绑定到任何属性,因此它们无法知道各自的属性名称。每当您需要“方法名称”时,将其硬编码为字符串文字。


好的,您可以做一些事情(使用命名函数表达式,您可以将其更改为 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' …"

然而,这是一个丑陋的黑客,你不应该使用它。

于 2013-10-04T12:02:46.813 回答