2010-04-18 31 views
11

Tôi có mã Javascript sauLàm cách nào để gọi các chức năng của một đối tượng trong cùng một đối tượng?

add_num = { 
    f: function(html, num) { 
    alert(this.page); 
    }, 

    page : function() { 
    return parseInt(this.gup('page')); 
    }, 

    gup : function(name) { 
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); 
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)'); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ''; 
    else 
     return results[1]; 
    } 
} 

Nhưng khi tôi gọi add_num.f() những gì tôi nhận được từ alert() là mã thực tế của trang. Tức là, nó trả về

function() { 
    return parseInt(this.gup('page')); 
    } 

Tôi đã mong đợi một giá trị số và không có mã nào cả.

+0

Bạn không thực sự * gọi * chức năng - chỉ cần chuyển nó làm đối tượng cho 'alert()'. Hãy thử 'alert (this.page());'. –

Trả lời

8

Đó là bởi vì bạn cần phải gọi page chức năng:

alert(this.page()); 

thay vì

alert(this.page); 
4

Bạn đang cảnh báo chính hàm đó, chứ không phải là kết quả của việc thực thi nó. Bạn nên làm điều này:

alert(this.page()); 
3

Nguyên nhân là do một chữ không phải là một chức năng, do đó không có hàm tạo (có thể nhìn thấy) nên 'this' sẽ tham chiếu đến đối tượng gọi.

Tất nhiên, điều này không đúng nếu bạn sử dụng gán chữ này cho nguyên mẫu của hàm, nhưng tôi đoán đây không phải là trường hợp ở đây.

Ngoài ra, Darin là chính xác, bạn đang trả lại chức năng, không thực thi nó.

Chỉ cần tham khảo đối tượng một cách rõ ràng, ví dụ: add_num.page().

add_num = { 
    f: function(html, num) { 
    alert(add_num.page()); 
    }, 

    page : function() { 
    return parseInt(add_num.gup('page')); 
    }, 

    gup : function(name) { 
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); 
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)'); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ''; 
    else 
     return results[1]; 
    } 
} 
+0

Việc sử dụng 'this' có quá tệ để gọi đối tượng một cách rõ ràng không? – Blexy

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