javascript:如何访问静态属性

时间:2013-05-02 18:18:15

标签: javascript properties static

我想使用实例访问静态属性。像这样的东西

function User(){
    console.log('Constructor: property1=' + this.constructor.property1) ;
}
User.prototype = {
    test: function() {
        console.log('test: property1=' + this.constructor.property1) ;
    }
}    
User.property1 = 10 ;   // STATIC PROPERTY

var inst = new User() ;
inst.test() ;

以下是jsfiddle

中的相同代码

在我的情况下,我不知道实例属于哪个类,所以我尝试使用实例'constructor'属性访问静态属性,但没有成功:( 这可能吗 ?

3 个答案:

答案 0 :(得分:5)

  

所以我尝试使用实例'constructor'属性

访问静态属性

这就是问题,你的实例没有constructor属性 - 你已经覆盖了整个.prototype对象及其默认属性。相反,使用

User.prototype.test = function() {
    console.log('test: property1=' + this.constructor.property1) ;
};

您也可以通过User.property1使用this.constructor代替绕道而行。此外,您无法确保您可能希望调用此方法的所有实例都将constructor属性指向User - 因此最好直接明确地访问它。

答案 1 :(得分:0)

function getObjectClass(obj) {
    if (obj && obj.constructor && obj.constructor.toString) {
        var arr = obj.constructor.toString().match(
            /function\s*(\w+)/);

        if (arr && arr.length == 2) {
            return arr[1];
        }
    }

    return undefined;
}

function User(){
     console.log('Constructor: property1=' + this.constructor.property1) ;
 }

User.property1 = 10 ;

var inst = new User() ;

alert(getObjectClass(inst));

http://jsfiddle.net/FK9VJ/2/

答案 2 :(得分:0)

也许您可以查看:http://jsfiddle.net/etm2d/

User.prototype = {
test: function() {
    console.log('test: property1=' + this.constructor.property1) ;
    }
} 

似乎有问题,虽然我还没弄清楚原因。