Đồng nghiệp của tôi đã sử dụng "new function ()" với "f" viết thường để xác định các đối tượng mới trong JavaScript. Nó dường như hoạt động tốt trong tất cả các trình duyệt chính và nó cũng có vẻ khá hiệu quả trong việc ẩn các biến riêng tư. Đây là một ví dụ:
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
Ngay sau khi "this" được sử dụng, nó sẽ trở thành tài sản công cộng của someObj. Vì vậy, someObj.foo, someObj.get_inner () và someObj.set_inner () đều có sẵn công khai. Ngoài ra, set_inner () và get_inner () là các phương thức đặc quyền, vì vậy chúng có quyền truy cập vào "bên trong" thông qua các bao đóng.
Tuy nhiên, tôi không thấy bất kỳ tài liệu tham khảo nào về kỹ thuật này ở bất kỳ đâu. Ngay cả JSLint của Douglas Crockford cũng phàn nàn về điều đó:
- xây dựng kỳ lạ. Xóa 'mới'
Chúng tôi đang sử dụng kỹ thuật này trong sản xuất và nó có vẻ đang hoạt động tốt, nhưng tôi hơi lo lắng về nó vì nó không được ghi lại ở bất cứ đâu. Có ai biết nếu đây là một kỹ thuật hợp lệ?
this
sẽ tham chiếu đến phần tử đã kích hoạt sự kiện, không phải đối tượng của bạn, nhưng bạn có thể cóvar instance = this
.