2010-11-25 75 views
5

Tôi đang cố truy cập chức năng lồng nhau bằng cách chuyển tên hàm vào dưới dạng chuỗi và sau đó gọi nó. Ví dụ: xem this bài đăngGọi chức năng lồng nhau khi tên hàm được chuyển thành một chuỗi

function outer(action){ 
    window["outer"][action](); 

    function inner(){ 
     alert("hello"); 
    } 
} 
outer("inner"); 

Tuy nhiên, nó không hoạt động. Lỗi:

window.outer[action] is not a function 

Cách thực hiện tác vụ này hoặc cách khác để gọi hàm lồng nhau.

Lý do cho điều này là tôi đang cố gắng ẩn một loạt các hàm được gọi bởi khung nội tuyến bên trong phạm vi chức năng.

Trả lời

6
function outer(action){ 
    var inner = { 
    func1: function() {}, 
    func2: function() {}, 
    func3: function() {}, 
    // ... 
    } 
    inner[action](); 
} 

outer("func1"); 
+1

Cảm ơn. Làm việc một điều trị – SystemicPlural

+0

vui vì tôi có thể giúp :) – galambalazs

1

Bằng cách đó, bạn đang cố gắng truy cập thuộc tính "bên trong" của hàm "bên ngoài" (outer.inner) không được xác định. Cách duy nhất để làm điều đó là bằng cách sử dụng eval:

function outer(action){ 
    eval(action+"()"); 

    function inner(){ 
     alert("hello"); 
    } 
} 
outer("inner"); 

Nhưng hãy nhớ rằng eval là một số tình huống nên hãy cẩn thận.

+0

eval. thôi. galambalazs đã đưa ra một giải pháp. – SystemicPlural

+1

Bạn sẽ không chết nếu bạn sử dụng eval tin tưởng tôi :) – mck89

+1

Vâng bạn sẽ không chết, Crockford sẽ không giết bạn, anh ta sẽ chỉ tra tấn bạn cho đến khi kết thúc thời gian: P –

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