2010-04-23 5 views
18

Khi mã hóa JavaScript đôi khi bạn lưu trữ tham chiếu của đối tượng this trong biến cục bộ cho các mục đích khác nhau (để đặt phạm vi thích hợp, để giúp mã obfuscators, v.v.). Có những lập trình viên thích đặt biệt hiệu this thành that để làm cho nó rõ ràng ý định của nó. Những kẻ khác sử dụng self vì nó trỏ đến chính đối tượng đó. Tôi thậm chí còn nhìn thấy mã nguồn nơi me giữ tham chiếu và nó vẫn có ý nghĩa. Chắc chắn có những người khác.điều đó, bản thân hoặc tôi - cái nào thích trong JavaScript?

Tôi nên chọn cái nào? Có một quy ước để sử dụng hay chỉ là vấn đề về hương vị.

+1

Lưu ý rằng nền chương trình có vẻ là yếu tố chính (chính?) - những người sử dụng (d) Smalltalk hoặc Python hoặc đã học từ những người sử dụng chúng, có xu hướng sử dụng 'bản thân'. – outis

Trả lời

42

Cá nhân tôi sử dụng that, nhưng bất kỳ điều gì khác rõ ràng là tốt.

Tôi sẽ không sử dụng self vì biến toàn cục/window -property self đã tồn tại dưới dạng tham chiếu đến window. Mặc dù nó hoàn toàn vô dụng (do đó không ai có khả năng để chăm sóc mà bạn đang shadowing nó), nó hơi làm tăng nguy cơ sai sót ngớ ngẩn đi bỏ ý:

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

khi:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

Hơi giả tạo, nhưng JavaScript rất cẩu thả với việc trượt lỗi mà bạn thực sự không muốn làm nó thêm nữa.

+0

Một rủi ro khác là quên 'var' khi gán cho' self'. IE * ghét * điều này. –

+0

Vâng, trình duyệt IE cũ tốt và tính năng chuyển nhượng bất động sản. Tuy nhiên, ít nhất nó ném một lỗi để cho bạn biết bạn đã hoàn thành một thực hành xấu. Ngay cả khi thông báo lỗi là vô vọng gây hiểu nhầm. – bobince

2

Có một quả cam trong giỏ táo ở đó, this có ý nghĩa theo ngữ cảnh rất cụ thể. Lựa chọn thực sự giữa các số selfme trong số các tùy chọn đó. Giữa những người ... bạn chọn, nó không quan trọng bằng cách nào chỉ là sở thích cá nhân.

this đề cập đến ngữ cảnh của bạn, vì vậy nó không thực sự là "tùy chọn" mà không đưa ra nhiều nhầm lẫn và dễ mắc lỗi. Tôi thấy self được sử dụng nhiều hơn me (trong mã ví dụ, khung, thư viện, v.v.). Nó chỉ là sở thích, nhưng tôi đồng ý self là hấp dẫn hơn, không chắc chắn lý do tại sao ... một lần nữa chỉ sở thích của tôi.

+2

Tôi thích 'tôi' vì đó là hai chữ cái ít hơn để gõ ... nhưng nó thực sự không quan trọng miễn là bạn * nhất quán *. –

+2

@codeka - điểm tuyệt vời, nhất quán là * xa * quan trọng hơn sự lựa chọn tên ở đây –

+2

Đồng ý về điểm nhất quán. Nó có thể chỉ là sự lựa chọn phản bội kinh nghiệm của một lập trình viên của các ngôn ngữ khác. 'self' là phiên bản 'This' và' me' của Delphi là phiên bản của VB. Theo như tôi biết, 'điều đó' không được sử dụng trong bất kỳ ngôn ngữ nào khác. –

1

Cá nhân tôi đang cố gắng cải thiện biến số có ý nghĩa hơn một chút so với "điều tôi cần sau này". Thường thì bạn cần những biến tạm thời đó trong các tình huống có chút gnarly; có thể có hai hoặc nhiều lớp tạm thời this stashes để theo dõi.

Vì vậy, ví dụ như trong một thiết lập jQuery, tôi có thể sử dụng một cái gì đó cần lưu ý các loại nguyên tố mà một tạm thời this stash nên giữ:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

Sử dụng "$" tiền tố trên biến là một cách tốt đẹp để theo dõi xem đối tượng đã được "jQuery-ized" hay chưa :-)