2015-11-19 24 views
6

Tôi có một lớp trong một tệp riêng biệt. Tôi cần phải tạo một thể hiện của nó trong một tập tin khác. Tôi đã thử điều này:node.js - Tạo cá thể của một lớp trực tiếp từ yêu cầu

var connection = new require('./connection.js')("ef66143e996d"); 

Nhưng điều này không hoạt động như tôi muốn. Hiện tại, tôi đang sử dụng giải pháp tạm thời này:

var Connection = require('./connection.js'); 
connection = new Connection("ef66143e996d"); 

Hai câu hỏi;

Trước tiên, tại sao nó không hoạt động.
Thứ hai, làm cách nào tôi có thể thực hiện việc này với một lớp lót?

Trả lời

8

Từ khóa new áp dụng chính nó trên hàm đầu tiên mà nó xuất hiện. Trong trường hợp này, điều đó xảy ra là require. Bao bọc câu lệnh trong dấu ngoặc đơn sẽ hiển thị đúng chức năng:

var connection = new (require('./connection.js'))("ef66143e996d"); 
+0

Tác phẩm này, ok. Nhưng tôi viện dẫn 'require' với' ("ef66143e996d") '. Tại sao 'new' không áp dụng cho hàm trả về từ' require ('./ connection.js') ("ef66143e996d") '. Đây phải là chức năng đầu tiên nó đi qua. – MindlessRanger

+1

Khi chạy 'yêu cầu mới ('kết nối')()', yêu cầu là hàm đầu tiên nó đi qua. Nó đang được đánh giá từ trái sang phải. Gói 'require ('connection')' trong dấu ngoặc đơn làm cho nó sao cho bất cứ thứ gì mà các dấu ngoặc đơn giải quyết là những gì 'new' đang được áp dụng. – jperezov

+1

Để làm rõ, giả sử 'require ('./ connection.js')' cho thấy hàm 'Connection', hàm' Connection' _isn't_ được phơi bày cho đến khi hàm 'require' được gọi. Từ khóa 'mới' sẽ kích hoạt trước hàm' require' _unless_ hàm được bao trong dấu ngoặc đơn. Đó là lý do tương tự '3 * 2 + 1 = 7', nhưng' 3 * (2 + 1) = 9'. Hãy suy nghĩ về từ khóa 'mới' như phép nhân trong ví dụ này - nó có quyền ưu tiên cao hơn. – jperezov

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