मान लीजिए मैं है निम्नलिखित कोड (पूरी तरह से बेकार, मुझे पता है)इसे सुरक्षित '(लागू)'
function add(a, b, c, d) {
alert(a+b+c+d);
}
function proxy() {
add.apply(window, arguments);
}
proxy(1,2,3,4);
असल में, हम जानते हैं कि लागू दूसरा पैरामीटर के रूप में एक सरणी की उम्मीद करने के लिए 'तर्क' पारित करने के लिए है , लेकिन हम यह भी जानते हैं कि arguments
एक उचित सरणी नहीं है। कोड अपेक्षा के अनुसार काम करता है, तो क्या यह कहना सुरक्षित है कि मैं किसी भी सरणी जैसी वस्तु को apply()
में दूसरे पैरामीटर के रूप में पास कर सकता हूं?
निम्नलिखित भी (क्रोम में कम से कम) काम करेगा:
function proxy() {
add.apply(window, {
0: arguments[0],
1: arguments[1],
2: arguments[2],
3: arguments[3],
length: 4
});
}
अद्यतन: ऐसा लगता है कि मेरी दूसरी कोड ब्लॉक आईई < 9 में विफल रहता है, जबकि पहले एक (arguments
गुजर) काम करता है। त्रुटि Array or arguments object expected
है, इसलिए हम निष्कर्ष निकालेंगे कि arguments
पास करना हमेशा सुरक्षित है, जबकि पुरानी आईई में एक सरणी जैसी वस्तु को पास करना सुरक्षित नहीं है।
क्यों _wouldn't_ "सुरक्षित" नहीं होगा? – Neal
@ नील अच्छी तरह से 'तर्क' एक सुंदर अजीब जानवर है, इसलिए इसके उपयोग के बारे में कुछ भयावहता अनुचित नहीं है। इस मामले में मैं कल्पना नहीं कर सकता कि यह एक समस्या कैसे होगी। – Pointy
@Neal, शायद क्योंकि 'तर्क' में सामान्य ऐरे के कई तरीके नहीं हैं, और '.apply' उनका उपयोग करना चाह सकता है? – Dogbert