2013-05-02 112 views
5

我想使用实例访问静态属性。这样javascript:如何访问静态属性

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

在我的情况,我不知道该实例属于哪个类相同的代码,所以我试图用实例来访问静态属性的构造函数“属性,但没有成功:( 这可能吗?

+0

不要在javascript中使用word类 – 2013-05-02 18:20:24

+0

@Johan:这个链接怎么和这里的任何东西相关? – Bergi 2013-05-02 18:28:48

回答

4

所以我试图用实例来访问静态属性的构造函数”属性

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

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

而且你也可能只是通过this.constructor使用User.property1,而不是绕道而行。此外,您无法确保您可能想要调用此方法的所有实例的constructor属性指向User - 因此可以更直接明确地访问它。

+0

如何从构造函数外部或静态方法访问静态属性? – 2013-10-19 19:44:22

+2

@AlanKis:直接在构造函数上,在这里例如'User.property1'。 – Bergi 2013-10-19 20:28:19

+0

确实,愚蠢的我。 – 2013-10-19 20:31:56

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/

0

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

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

似乎是有问题的,虽然我还没有想通了,为什么。