2012-05-19 30 views
35

CSiginIn, CSignUp, CTryIt, CBlocks được tất cả chức năng tuyên bố như vậyjshint hy vọng mới 'prefix' cho các chức năng

function CSignIn(){//stuff here} 

chưa JSHint nói rằng tôi đang thiếu 'mới' 'prefix'. Tôi có thể làm gì để sữa nó?

Chúng chỉ là các chức năng bên trong mẫu mô-đun. Ngoài ra, nó yêu cầu tôi loại bỏ dấu chấm phẩy tôi đã đặt ở cuối chức năng mà tôi đã làm.

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

    var publik = function (page) 
    { 
     // page 1 initialization 

     if(page == 1) 
     { 
      CSignIn(); 
      CSignUp(); 
      CTryIt(); 
      CBlocks(); 
     } 

Function Ví dụ ...

function CTryIt() 
{ 
    // pull elements 

    var tryit_button = document.getElementById('tryit_button'); 

    // initialize access to Model 

    tryit_button.addEventListener("click", function() 
    { 
     new AjaxRequest().invoke('ajax_type=ControlTryIt', 
     function(server_response_text) 
     { 
      new AjaxResponse(server_response_text, 'page_change'); 
     }); 

    }, false); 
} 

Trả lời

67

Nếu newcap được kích hoạt, JSHint hy vọng chức năng bắt đầu bằng chữ cái vốn là nhà thầu và do đó được gọi với từ khóa new.

Giải pháp: Hoặc tắt tùy chọn này hoặc đổi tên các chức năng của bạn.

Từ documentation:

Tùy chọn này đòi hỏi bạn phải tận dụng tên của các chức năng constructor. Viết hoa các hàm được sử dụng với toán tử new chỉ là một quy ước giúp các lập trình viên phân biệt trực quan các chức năng của hàm dựng từ các loại hàm khác để giúp phát hiện lỗi khi sử dụng this.

Không làm như vậy sẽ không phá vỡ mã của bạn trong bất kỳ trình duyệt hoặc môi trường nào nhưng sẽ khó hơn một chút - bằng cách đọc mã — nếu chức năng được sử dụng có hoặc không có new. Và điều này quan trọng bởi vì khi hàm được sử dụng với new được sử dụng mà không có nó, this sẽ trỏ đến đối tượng chung thay vì một đối tượng mới.

function MyConstructor() { 
    console.log(this); 
} 

new MyConstructor(); // -> [MyConstructor] 
MyConstructor();  // -> [DOMWindow] 

Đối với một sâu sắc hơn sự hiểu biết về cách this công trình, đọc Understanding JavaScript Function Invocation and "this" bởi Yehuda Katz.

+1

O.K. Tôi không muốn gây nhầm lẫn cho người khác vì vậy tôi sẽ có khả năng mất mũ .. cảm ơn cho thông tin. –

6

Felix Kling đã cung cấp cho bạn câu trả lời đúng. Để hoàn thành, tôi sẽ lưu ý rằng newcap mặc định là true (Tài liệu không nêu rõ, nhưng bạn có thể đọc nó trong source code). Điều này có nghĩa là việc xóa cài đặt newcap: true trong tùy chọn JSHint sẽ không tắt cảnh báo: thay vào đó, bạn cần đặt rõ ràng newcap: false.

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