প্রকারের ত্রুটি: কনসোল.লগ.অ্যাপলিতে অবৈধ অনুরোধ


129

আপনি যদি এটি ক্রোম কনসোলটিতে চালান:

console.log.apply(null, [array])

ক্রোম আপনাকে ত্রুটি ফিরিয়ে দেয়:

// TypeError: Illegal Invocation

কেন? (ওএসএক্সের মাধ্যমে ক্রোম 15 এ পরীক্ষিত)

উত্তর:


180

এটি কার্যকর হতে পারে যখন মৃত্যুদন্ডের প্রসঙ্গটি কনসোল থেকে অন্য কোনও অবজেক্টে পরিবর্তিত হয়:

এটি প্রত্যাশিত কারণ কনসোল.ইনফো উইন্ডো নয়, এর "এই" রেফারেন্সটি কনসোল হিসাবে প্রত্যাশা করে।

console.info("stuff")
stuff
undefined
console.info.call(this, "stuff")
TypeError: Illegal invocation
console.info.call(console, "stuff")
stuff
undefined

এই আচরণ আশা করা হয়।

https://bugs.chromium.org/p/chromium/issues/detail?id=48662


25
যদি আপনাকে কোনও ফাংশন হিসাবে ব্যবহার করার প্রয়োজন হয় তবে আপনি কনসোল.info.bind (কনসোল) ব্যবহার করতে পারেন
জন উইলিয়ামস

3
সুতরাং আপনি কি console.info.call(console, "stuff")সমস্ত ব্রাউজারগুলিতে ব্যবহার করতে পারেন যা ইএস 5 সমর্থন করে?
মুচাহো

2
একই আবেদন করতে হবে: console.info.apply(console, arguments)
পিটারএম

একই যুক্তি অন্যান্য ফাংশনগুলিতে যেমন কনসোল.লগ () এবং ডকুমেন্ট.উইটেলন () এর ক্ষেত্রে প্রযোজ্য। সুতরাং, কল () বা প্রয়োগ () প্রয়োগ করে থাকলে সর্বদা সঠিক সম্পাদনার প্রসঙ্গ সরবরাহ করুন। পর্যায়ক্রমে, বাঁধাই () ব্যবহার করুন যেমন @ জন উইলিয়ামস নির্দেশ করেছেন।
অ্যালান সিএস

1
ডেভটুলস এফ 12 না খোলার পরেও এটি আইই 11 / এজতে প্রযোজ্য।
বেনি বোত্তেমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.