2013-05-02 29 views
5

Tôi muốn truy cập thuộc tính tĩnh bằng cách sử dụng một cá thể. Một cái gì đó như thế nàyjavascript: cách truy cập các thuộc tính tĩnh

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() ; 

Đây là đoạn mã tương tự trong một jsfiddle

Trong trường hợp của tôi, tôi không biết đó là lớp sơ thẩm thuộc, vì vậy tôi đã cố gắng để truy cập vào các tài sản tĩnh nhờ sủ dụng các dụ 'constructor 'bất động sản, nhưng không thành công :( đây có phải là có thể?

+0

không sử dụng lớp từ trong javascript –

+0

@Johan: Liên kết đó liên quan đến bất kỳ thứ gì ở đây? – Bergi

Trả lời

4

vì vậy tôi đã cố gắng để truy cập vào các tài sản tĩnh nhờ sủ dụng các dụ 'constructor' tài sản

Đó là vấn đề, trường hợp của bạn không có thuộc tính constructor - bạn đã ghi đè toàn bộ đối tượng .prototype và thuộc tính mặc định của nó. Thay vào đó, sử dụng

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

Và bạn cũng chỉ có thể sử dụng User.property1 thay vì đường vòng qua this.constructor. Ngoài ra, bạn không thể đảm bảo rằng tất cả các trường hợp mà bạn có thể muốn gọi phương thức này sẽ có thuộc tính constructor trỏ đến User - để truy cập trực tiếp và rõ ràng hơn.

+0

Làm cách nào để truy cập thuộc tính tĩnh từ bên ngoài hàm tạo, hoặc thậm chí từ phương thức tĩnh? –

+2

@AlanKis: Chỉ cần trực tiếp trên hàm tạo, trong ví dụ này là 'User.property1'. – Bergi

+0

Chính xác, tôi ngu ngốc. –

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

Có lẽ bạn có thể có một cái nhìn tại địa chỉ: http://jsfiddle.net/etm2d/

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

dường như có vấn đề, mặc dù tôi vẫn chưa tìm ra lý do tại sao.

Các vấn đề liên quan