2010-06-25 13 views
9

मुझे लगता है कि मुझे रूबी के स्प्लट * जैसे कुछ चाहिए।जावास्क्रिप्ट: फ़ॉरवर्डिंग फ़ंक्शन कॉल जो तर्कों की परिवर्तनीय संख्या लेते हैं

function foo() { 
    var result = ''; 
    for (var i = 0; i < arguments.length; i++) { 
    result += arguments[i]; 
    } 
    return result; 
} 

function bar() { 
    return foo(arguments) // this line doesn't work as I expect 
} 

bar(1, 2, 3); 

मैं इस "123" वापस करना चाहते, लेकिन इसके बजाय मैं "[object Arguments]" मिलता है। जो समझ में आता है, मुझे लगता है। यह उस ऑब्जेक्ट को पास कर रहा है जो तर्कों का प्रतिनिधित्व करता है, लेकिन व्यक्तिगत रूप से तर्क नहीं।

तो मैं किसी भी प्रकार के तर्कों को किसी अन्य फ़ंक्शन में कैसे अग्रेषित करूं जो किसी भी तर्क को लेता है?

उत्तर

19

सही ढंग से एक और कार्य करने के लिए तर्क पारित करने के लिए, आप का उपयोग करने के apply की जरूरत है:

function bar() { 
    return foo.apply(null, arguments); 
} 

apply विधि दो पैरामीटर लेता है, पहले thisObj है, यह का मूल्य this मूल्य के रूप में इस्तेमाल किया जाएगा आवंटित फ़ंक्शन के अंदर, यदि आप null या undefined का उपयोग करते हैं, तो this फ़ंक्शन के अंदर मान वैश्विक ऑब्जेक्ट को संदर्भित करेगा।

दूसरा तर्क है कि apply अपेक्षा करता है, एक सरणी जैसी वस्तु है जिसमें फ़ंक्शन पर लागू होने वाले तर्क शामिल हैं।

उपर्युक्त उदाहरण here देखें।

3

इस return foo.apply(this,arguments) आज़माएं। इसके अलावा आप अपने foo फ़ंक्शन के लिए केवल Array.prototype.slice.apply(arguments).join('') का उपयोग कर सकते हैं।

संबंधित मुद्दे