2012-08-29 3 views
5

Tôi có một đối tượng lồng nhau trong javascript như thế này:Javascript lồng nhau truy cập đối tượng cấp cơ

{ 
nameRoot: "my object", 
sub: { 
    nameSub: "my sub object" 
} 
} 

tôi muốn truy cập nameRoot từ một chức năng quy định tại phụ.

Sử dụng một chức năng tôi sẽ đã xác định cái gì đó như:

var self = this; 

và sử dụng tự nhưng làm thế nào tôi có thể làm điều này trong một đối tượng theo nghĩa đen?

+0

Tôi không tin rằng bạn có thể. Tôi không biết các bài viết ra khỏi đầu của tôi, nhưng tôi nhớ đọc này trên StackOverflow gần đây. Bạn có thể định nghĩa đối tượng đó như một hàm, thay vì một đối tượng theo nghĩa đen? – Brad

+2

Bạn không thể. Nhưng một đối tượng không phải là không có tham chiếu, vì vậy một nơi nào đó bạn phải có một tham chiếu đến đối tượng bạn đang ở, không? – David

+1

Đây cũng là lý do tại sao các nút và như vậy cần phải có một tham chiếu rõ ràng trở lại 'parentNode'. – voithos

Trả lời

1

Mã sau đây cho phép bạn liên kết đến phần tử gốc và tránh hiển thị phụ huynh theo vòng lặp for-in.

var parent = { a: 1 }; 
var child = { b: 2 }; 

Object.defineProperty(
    child, 'parent', 
    { value: parent, 
     enumerable: false } 
); 

parent.child = child; 

child.performAction = function() { 
    console.log(this.parent.a) // 1 
} 
0

Vì vậy, cách tốt nhất để làm điều này là w/phạm vi chức năng.

function myFunc(){ 
    this.nameRoot = "my object"; 
} 

sau đó bạn có thể làm một cái gì đó như:

var func = new myFunc(); 
func.sub = new myFunc(); 
func.sub.nameRoot = "my sub object"; 

Rõ ràng có nhiều cách thông minh hơn để làm điều đó (ví dụ vượt qua tên thông qua chức năng params) nhưng đây là mô hình chung.

+0

Câu hỏi: _Nhưng làm thế nào tôi có thể làm điều này trong một "đối tượng theo nghĩa đen" _ –

+0

Bạn không thể, đó là lý do tại sao tôi nói để làm điều đó theo cách tôi đề xuất. – Paul