2013-05-18 28 views
10

Tôi đang đọc mã nguồn KnockoutJS."mới" Trước khi gọi hàm ẩn danh Trả về đối tượng

Tôi chạy vào dòng sau mà tôi không chắc là tôi hiểu ...

ko.utils = new (function() { 

Nói chung, cấu trúc có vẻ là dọc theo dòng:

ko.utils = new (function() { 

    // some variables declared with var 

    return { 
     export:value, 
     export:value 
    }; 

})(); 

I don' Tôi hiểu cấu trúc này, tại sao cần new? Nó làm gì? nó là gì hữu ích cho?

(Tôi nghĩ rằng nếu một hàm được gọi với new trước tên của nó được gọi là một nhà xây dựng, và nếu nó trả về một đối tượng nó giống y hệt một invokation mà không new.)

UPDATE: tôi hỏi nhóm KnockoutJS trên github và đây là những gì tôi nhận được:

Tôi đoán là Steve không biết rằng nó không cần thiết. Nhìn lại cam kết ban đầu của mình, tôi thấy rất nhiều tin tức không cần thiết đã bị xóa.

+1

Theo như tôi có thể nói, 'cái new' không có tác dụng trong trường hợp này –

+0

liên quan: [Có quyền nghĩ đến một hàm JavaScript Biểu hiện có sử dụng từ khóa 'mới' là 'tĩnh'] (http://stackoverflow.com/questions/10406552/is-it-right-to-think-of-a-javascript-function-expression-that-uses-the-new-key) – Bergi

+0

Chỉ tình cờ gặp phải cả hai chúng… – Bergi

Trả lời

10

Nó có thể là một số mô hình, giúp ngăn chặn this để đạt được bối cảnh toàn cầu (không phải trong trường hợp này, vì mỗi biến được khai báo var, nhưng tác giả có thể muốn sử dụng nó như là một mô hình chung để tạo các đối tượng).

var x = new (function() { 
    this.foo = "bar"; 
    return { 
     // whatever 
    }; 
})(); 

console.log(foo); // Uncaught ReferenceError: foo is not defined 

var x = (function() { // without new 
    this.foo = "bar"; 
    return { 
     // whatever 
    }; 
})(); 

console.log(foo); // "bar" 
+0

+1 Điều đó rất thông minh :) (của bạn để tìm ra lý do đó). Các loại điều '" sử dụng nghiêm ngặt ";' tránh. Đó là hoàn toàn thỏa đáng, cảm ơn. –

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