2013-02-03 42 views
5

Điều gì sẽ xảy ra nếu bạn không gán đối tượng mới cho biến? Ví dụ:Điều gì sẽ xảy ra nếu đối tượng mẫu mới không được gán cho một biến?

function MyConstructor() { 
    // Codes here 
}; 

new MyConstructor(); // new object instance is not assign to a variable 

Mã này có nguy hiểm không? Nó có làm mất không gian tên chung không? Có thể truy cập đối tượng được tạo theo kiểu này không?

Cảm ơn.

+0

Tại sao bạn tạo đối tượng chứ không tạo tham chiếu đến đối tượng đó? Tôi không nghĩ rằng nó có thể truy cập nó sau đó, trừ khi bạn đang trả lại nó từ một hàm. –

+0

Có phải 'MyConstructor' hoặc là' Test'? – Bergi

+0

Rất tiếc Rất tiếc, MyConstructor không Test .. Cảm ơn các bạn đã trả lời .. :) – japt

Trả lời

8
  • Mã này có nguy hiểm không? - Không.
  • Công cụ này có chiếm không gian tên chung không? - Không.
  • Có thể truy cập đối tượng được tạo theo kiểu này không? - Không.

Như bạn nói đúng, cuộc gọi new MyConstructor() sẽ trả về một đối tượng mới, tham chiếu đến nó sẽ chỉ không được lưu trữ và do đó sẽ được xóa bởi các bộ thu rác rất nhanh chóng. cơ hội duy nhất của bạn để hành động mà đối tượng mới là trực tiếp

new MyConstructor().someMethod(); 

... sau đó, bạn đã mất cơ hội của bạn và các tài liệu tham khảo đối tượng mới bị mất trong ngoài không gian :)

+0

+1 cho phần thứ hai. –

+3

'this' bên trong constructor và sau đó được lưu trữ ở nơi khác sẽ làm việc. –

+0

@LeeTaylor: rất nhiều thứ sẽ hoạt động, nhưng vì OP không đề cập đến một số cấu trúc điên rồ ở bất kỳ đâu, tại sao chúng ta lại giả định như vậy? – jAndy

1

bởi vì có không có tham chiếu đến nó sau khi tạo ra nó nhanh chóng thu thập rác thải.

chỉ FYI: lý do tạo đối tượng 80 đến 90% thời gian là để chúng có thể được tham chiếu và sử dụng sau này.

+2

'this' bên trong hàm tạo và sau đó được lưu trữ ở nơi khác sẽ hoạt động. –

4

Trừ khi bản thân nhà xây dựng lưu tham chiếu đến đối tượng ở đâu đó bên ngoài đối tượng, không có tham chiếu đến đối tượng dài hơn và bộ thu gom rác sẽ xóa đối tượng đó.

Mã không nguy hiểm, nó sẽ không thêm bất kỳ thứ gì vào không gian tên chung và không thể tiếp cận đối tượng trừ khi hàm tạo làm cho nó có thể.

Một ví dụ về nơi nó có thể được sử dụng sẽ được nếu các nhà xây dựng đăng ký các đối tượng chính nó:

var myHandlers = {}; 

function Handler(name) { 
    myHandlers[name] = this; 
} 

new Handler("test"); 

Hạn chế của việc sử dụng một cái gì đó như thế là tất nhiên rằng nó khó khăn hơn để làm theo những gì đang xảy ra.

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