Không, trả lại this
là không cần thiết, nhưng nó hợp lệ. Nếu giá trị trả về là một đối tượng, new
sẽ trả về đối tượng đó thay vì đối tượng mới được tạo.
Xem chỉ 11.2.2 và 13.2.2 của ECMAScript 5:
Các nhà điều hành mới gọi là nội bộ [[Xây dựng]] phương pháp trên các nhà xây dựng (thường là một chức năng):
11.2.2 các điều hành mới
việc sản xuất NewExpression: NewExpression mới được đánh giá như sau:
- Hãy ref được kết quả của việc đánh giá NewExpression.
- Cho phép hàm tạo GetValue (ref).
- Nếu loại (hàm tạo) không phải là đối tượng, hãy ném ngoại lệ TypeError.
- Nếu hàm tạo không thực hiện phương thức bên trong [[Xây dựng]], hãy ném ngoại lệ TypeError.
- Trả về kết quả của việc gọi phương thức bên trong [[Xây dựng]] trên hàm tạo, không cung cấp đối số (nghĩa là, một danh sách đối số trống).
Các [[xây dựng]] phương pháp nội bộ các chức năng được mô tả tại điểm 13.2.2:
13.2.2 [[xây dựng]]
Khi [[Xây dựng ]] phương thức nội bộ cho đối tượng Hàm F được gọi với danh sách đối số có thể trống, các bước sau được thực hiện:
- Cho obj b e đối tượng ECMAScript gốc mới được tạo.
- Đặt tất cả các phương pháp nội bộ của obj như được chỉ định trong 8.12.
- Đặt thuộc tính nội bộ [[Class]] của obj thành "Object".
- Đặt thuộc tính nội bộ [[Extensible]] của obj thành true.
- Cho phép proto là giá trị gọi thuộc tính bên trong [[Get]] của F với đối số "nguyên mẫu".
- Nếu Loại (proto) là Đối tượng, hãy đặt thuộc tính bên trong [[Prototype]] của obj thành proto.
- Nếu loại (proto) không phải là đối tượng, hãy đặt thuộc tính bên trong [[Prototype]] của obj thành đối tượng mẫu chuẩn được xây dựng trong đối tượng đối tượng được mô tả trong 15.2.4.
- Cho kết quả là kết quả của việc gọi thuộc tính bên trong [[Call]] của F, cung cấp obj làm giá trị này và cung cấp danh sách đối số được chuyển vào [[Construct]] dưới dạng arg.
- Nếu loại (kết quả) là đối tượng thì kết quả trả về.
- Trả về obj.
bản sao có thể có của [Giá trị nào mà một hàm tạo có thể quay lại để tránh trả lại điều này?] (Http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid- trở lại-này) –