2012-04-14 44 views
6

Tôi có mã sau đây và tôi tự hỏi cách làm cho dòng cuối cùng hoạt động. Tôi addopted một tập hợp các api sử dụng hiện tại _view nối thêm như nó là quy ước đặt tên và thay vì sẽ sử dụng một cái gì đó như arc.view. $ Function_name. thxjavascript gọi hàm trên đối tượng cửa sổ

var arc={}; 
arc.view={ 
    say_hello: function(){ 
    alert("I want to say hello"); 
    } 
} 
function say_goodbye(){ 
    alert("goodbye to you"); 
} 

arc.view.say_hello(); // works 
window['say_goodbye'](); // works 
// possible to make this work? 
window['arc.view.say_hello'](); 
+2

vì bạn, tôi sẽ kết thúc toàn bộ cuộc đấu tranh của mình với thành công ... cảm ơn +1 –

+0

@vikasdevde :) thumbs up ... +1 – agpt

Trả lời

10
window['arc']['view']['say_hello'](); 

hoặc

window.arc.view.say_hello() 

hoặc

window['arc'].view['say_hello']() 

Hoặc là chấm cú pháp hoặc cú pháp khung sẽ làm việc. Cú pháp Dot thực sự chỉ là cú pháp cú pháp để tìm kiếm thuộc tính dựa trên khung, vì vậy tất cả các đoạn mã trên đều giống hệt nhau. Sử dụng cú pháp khung khi tên thuộc tính chính nó là giá trị động hoặc khi sử dụng tên thuộc tính trong cú pháp dấu chấm sẽ gây ra lỗi cú pháp. Ví dụ:

var dynamicMethodName = someObject.getMethodName(); 
someOtherObject[dynamicMethodName](); 

hoặc

someOtherObject["a key string with spaces and {special characters}"](); 
3

Hãy thử điều này:

jsFiddle

window["arc"]["view"]["say_hello"](); 
2

Sử dụng các ký hiệu khung vuông bạn đang thực sự yêu cầu để thực hiện một chức năng trong cửa sổ được gọi là arc.view.say_hello, và không phải là một chức năng trong đối tượng view (đó là tài sản của đối tượng arc). Để rõ ràng hơn:

window["arc.view.say_hello"] = function() { alert("hi") }; 

window["arc.view.say_hello"](); // "hi" 

Nếu bạn muốn gọi hàm theo cách bạn mô tả, bạn phải "giải quyết" chuỗi đối tượng. Bạn có thể tạo một hàm tiện ích cho điều đó. Một cái gì đó như:

var arc={}; 
arc.view={ 
    say_hello: function(){ 
    alert("I want to say hello"); 
    } 
} 
function say_goodbye(){ 
    alert("goodbye to you"); 
} 

function call(id) { 
    var objects = id.split("."); 
    var obj = this; 

    for (var i = 0, len = objects.length; i < len && obj; i++) 
     obj = obj[objects[i]]; 

    if (typeof obj === "function") 
     obj(); 
} 

call("say_goodbye"); 
call("arc.view.say_hello"); 

Bạn cũng có thể mở rộng chức năng tiện ích để sử dụng arguments (hoặc bạn chỉ có thể trở lại tham chiếu đến các chức năng).

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