我想使用实例访问静态属性。像这样的东西
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'属性访问静态属性,但没有成功:( 这可能吗 ?
答案 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));
答案 2 :(得分:0)
也许您可以查看:http://jsfiddle.net/etm2d/
User.prototype = {
test: function() {
console.log('test: property1=' + this.constructor.property1) ;
}
}
似乎有问题,虽然我还没弄清楚原因。