2010-05-30 35 views
5

Hiệu ứng của câu lệnh trả về trong phần thân hàm JavaScript khi nó được sử dụng như một hàm tạo cho một đối tượng mới (với từ khoá 'mới') là gì?Tuyên bố trả về trong JS Constructors

+0

Xem: http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this/ – CMS

Trả lời

17

Thường là return chỉ cần thoát khỏi hàm tạo. Tuy nhiên, nếu giá trị trả về là một đối tượng, nó được sử dụng như giá trị của biểu thức new.

xem xét:

function f() { 
    this.x = 1; 
    return; 
} 
alert((new f()).x); 

hiển thị 1, nhưng

function f() { 
    this.x = 1; 
    return { x: 2}; 
} 
alert((new f()).x); 

hiển thị 2.

+1

+1, trả lời bị thu hồi. – Matchu

+0

Cảm ơn, đó chỉ là những gì tôi muốn biết. – Tony

1

Lý do để sử dụng toán tử new là để đảm bảo rằng this bên trong constructor dùng để chỉ một bối cảnh mới hỗ trợ:

this.functionName = function(){...}; 

, và cho phép việc sử dụng các instanceof điều hành:

function foo() {...} 
var bar = new foo(); 
alert(bar instanceof foo); 

Sử dụng return {...} bên trong một nhà xây dựng như phủ nhận cả hai hiệu ứng như this sẽ không cần thiết với một mô hình như vậy, và như instanceof sẽ trả lại false.

+0

Cảm ơn bạn đã phản hồi, tôi nghĩ điều này tiết lộ một nhược điểm của các nhà thầu js. – Tony

+0

Hoặc cho thấy sự linh hoạt ngôn ngữ đã :) –

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