2012-07-01 30 views
12
var tools = {}; 

tools.triangle = function() { 
    var originX = 0; 
    var originY = 0; 
} 

 Sự khác biệt giữa var và hàm này trong hàm Javascript?

var tools = {}; 

tools.triangle = function() { 
    this.originX = 0; 
    this.originY = 0; 
} 

Có bất kỳ sự khác biệt giữa hai khối mã? Xin lỗi nếu điều này đã được hỏi lúc trước.

+1

Biến 'var' là riêng tư. Biến 'this' này là công khai. – elclanrs

+1

@ elclanrs — nhận xét đó không hữu ích vì nó gây hiểu nhầm. Các biến có thể được khai báo là globals, 'this' có liên quan đến bối cảnh thực thi, nó không phải là một biến theo nghĩa thông thường, mặc dù nó có thể được coi là một biến cục bộ. – RobG

Trả lời

11

var tạo biến cục bộ trong phạm vi tools.triangle. Các biến số originXoriginY không thể tương tác với bên ngoài tools.triangle. this là một con trỏ đến đối tượng hiện tại bạn đang xử lý. Ví dụ thứ hai có thể được sử dụng để cung cấp các thuộc tính cho một đối tượng bằng cách thực hiện new tools.triangle();. Nếu bạn không sử dụng new và chỉ sử dụng tools.triangle();, this sẽ trỏ đối tượng chung là đối tượng window. Bạn có thể thay đổi đối tượng mà this điểm bằng cách sử dụng các phương pháp chức năng call();apply(); như thế này:

var myObj = {}; 

tools.triangle.call(myObj); 

// "this" in tools.triangle now points to myObj 
// myObj now has the properties originX and originY 

Điều quan trọng là phải biết rằng this có thể tham khảo bất kỳ đối tượng, cũng như không được định nghĩa hoặc null trong chế độ nghiêm ngặt ES5 .

Bạn có thể tìm thêm thông tin here.

+0

Được rồi, cảm ơn câu trả lời. –

+0

'this' cần giải thích nhiều hơn cung cấp, nó được thiết lập bởi các cuộc gọi và có thể tham khảo ** bất kỳ đối tượng **, cũng như được undefined hoặc' null' trong chế độ nghiêm ngặt ES5. – RobG

+0

@ 0x499602D2 Cảm ơn bạn đã trả lời. Tôi thực sự đang tìm kiếm điều này. Tôi cũng không nhận thức được thực tế rằng phương thức 'call' (và' apply') có thể thay đổi phạm vi. – GuyT

0

Trong ví dụ đầu tiên, X và Y cả hai đều tồn tại dưới dạng biến cục bộ cho đóng được lưu trong biến triangle.

Trong ví dụ thứ hai, X và Y tồn tại dưới dạng biến cho đối tượng tools.triangle do việc sử dụng this.

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