2011-03-12 36 views
12

Mới để Javascript, đọc Crockford của Javascript: Các phần tốt (trong số những thứ khác)Tại sao các phương pháp trợ giúp thường được sử dụng trong Javascript?

Trong chương thứ 4 liên quan đến chức năng Crockford đang hiển thị cách bảo toàn chức năng bên ngoài này.

Câu hỏi của tôi là, trong ví dụ mã của mình và một tấn giống như nó, tại sao sử dụng chức năng helper này:

myObject.double = function() { 
    var that = this; 

    var helper = function() { 
     that.value = add(that.value, that.value); 
    } 
    helper(); 
}; 

Có lẽ vì add() đang ngồi trong phạm vi toàn cầu, trong khi giá trị trong myObject, vì vậy tôi cần phải sao chép này (myObject) sau đó chuyển sang toàn cầu, nơi tôi có thể lấy add()?

Nếu không, tôi không chắc tại sao tôi cần chức năng trợ giúp?

Trả lời

13

Trong phần đó của cuốn sách, ông đang chứng minh rằng thông thường sử dụng that khi truy cập đối tượng this của cha mẹ của hàm.

Không nhất thiết phải sử dụng chức năng trợ giúp để thực hiện những gì mã đó thực hiện. Nó chỉ là một ví dụ để minh họa cách giải quyết các vấn đề phạm vi với đối tượng this.

+0

Tôi đã tự hỏi nếu đó chỉ là một minh họa cho khái niệm đó. Cảm ơn –

+1

câu trả lời tốt Tôi đoán tôi đã bỏ lỡ "đó". – airmanx86

2

Đóng gói. Các helper() trong ví dụ của bạn chỉ tồn tại trong phạm vi myObject.double() nó sẽ không có sẵn/có thể nhìn thấy bên ngoài của nó. Tôi tin rằng nó được gọi là phương thức riêng thay vì hàm "helper".

1

Sách cũng cho biết "giá trị này bị ràng buộc với giá trị sai". Giá trị "sai" của "điều này" có phải là đối tượng toàn cầu không? Cách Crockford sửa chữa nó khiến tôi không chắc chắn. Anh ta không thể sửa nó theo cách quen thuộc hơn với những người có nền "cổ điển" chỉ bằng cách gọi this.helper(), tức là làm cho helper() là một phương thức công khai? Tôi đoán có và đoán rằng ông đã làm nó theo cách ông đã làm nó chỉ để (cũng) cho thấy một workaround vẫn còn sử dụng một mô hình invokation chức năng, nhưng muốn có mà xác nhận; là mới để javascript không chắc chắn đoán của tôi là chính xác.

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