2013-05-22 19 views
5

Có cách nào để lấy giá trị trả về của hàm khi được gọi từ cuộc gọi() hoặc áp dụng() không?Giá trị trả lại bằng lệnh gọi() hoặc áp dụng() trong JavaScript

kịch bản của tôi:

Tôi có một chức năng hoạt động tốt với apply() chức năng. Trên đối tượng contructor:

var someObject = new SomeObject({NameFunction: "MakeNames"}); 

trên một vòng lặp trong phương pháp của đối tượng:

var name = ""; 
for (var i = 0; i < data.length; i++) { 
    name = window[this.NameFunction].apply(null, [data[i]]); 
} 

MakeNames chức năng:

function MakeNames(data) 
{ 
    return data.FirstName + " " + data.LastName; 
} 

Đó var name nghỉ rỗng nguyên nhân apply không trả lại bất kỳ giá trị từ hàm. Lưu ý rằng tôi chắc chắn rằng hàm được gọi và đối số được truyền thành công. Xin vui lòng không cho tôi biết để sử dụng trực tiếp name = MakeNames(data[i]);, bởi vì rõ ràng là tôi không muốn giải pháp này.

Không quan trọng nếu đó là apply, call hoặc bất kỳ JavaScript nào phải thực hiện công việc này, nếu hoạt động.

Tôi làm cách nào để đạt được điều này?

+0

giá trị trả lại hoạt động tốt cho tôi. chạy điều này trong giao diện điều khiển trình duyệt 'var x =" huh ".toString.apply (" test ");' set x to "test" cho tôi. –

+1

áp dụng và cuộc gọi sẽ trả lại giá trị. Cái gì khác phải sai. bạn có thể cung cấp nhiều mã hơn đã hiển thị hàm bạn đang cố gắng gọi không? Ngoài ra toString đang làm gì? tên hàm của bạn đã là một chuỗi trong ví dụ của bạn. – Tim

+0

@ ben336 Xin lỗi anh bạn, không thể hiểu được quan điểm của bạn. Bạn có thể đăng câu trả lời chính xác hơn không? – DontVoteMeDown

Trả lời

11

Kết quả:

window[this.NameFunction.toString()].apply(null, [data[i]]) 

giống hệt nhau như:

MakeNames(data[i]) 

kể từ sự khác biệt duy nhất là giá trị của này trong hàm MakeNames và kể từ này không được sử dụng, nó không thể thực hiện bất kỳ sự khác biệt. Việc sử dụng áp dụng không thay đổi việc hàm trả về giá trị hay không, hoặc giá trị là gì.

Bất kỳ vấn đề nào bạn gặp phải, nó không nằm trong mã (bit) được đăng.

+1

Chúa chết tiệt bạn nói đúng. Mã này là ok, vấn đề nằm ngoài nó. Xấu hổ với tôi. Cảm ơn bạn. – DontVoteMeDown

0

Tôi không thấy trong mã của bạn nơi data được đặt hoặc nơi data[i] sẽ là đối tượng có các thuộc tính FirstNameLastName. Hãy thử một fail-over:

function MakeNames(data) { 
    return (data.hasOwnProperty('FirstName')) ? data.FirstName + " " + data.LastName : 'John Doe'; 
} 
Các vấn đề liên quan