কিছু কিছু বিষয় একটি Eval মত ফাংশন ছাড়া জাতীয় না করা অসম্ভব যে হয় ( eval, Functionএবং হয়ত বেশি)।
applyউদাহরণস্বরূপ নিন । এটি সাধারণ ফাংশন কলগুলিতে ব্যবহার করার সময় এটি ব্যবহার করা সহজ:
foo.apply(null, [a, b, c])
তবে আপনি নতুন সিনট্যাক্সের মাধ্যমে তৈরি করা সামগ্রীর জন্য কীভাবে আপনি এটি করবেন?
new Foo.apply(null, [a, b, c]) কাজ করে না, অনুরূপ ফর্মও করে না।
তবে আপনি এই সীমাবদ্ধতার মাধ্যমে evalবা এর মাধ্যমে Function( Functionএই উদাহরণে আমি ব্যবহার করতে পারি) কাজ করতে পারেন :
Function.prototype.New = (function () {
var fs = [];
return function () {
var f = fs[arguments.length];
if (f) {
return f.apply(this, arguments);
}
var argStrs = [];
for (var i = 0; i < arguments.length; ++i) {
argStrs.push("a[" + i + "]");
}
f = new Function("var a=arguments;return new this(" + argStrs.join() + ");");
if (arguments.length < 100) {
fs[arguments.length] = f;
}
return f.apply(this, arguments);
};
}) ();
উদাহরণ:
Foo.New.apply(null, [a, b, c]);
অবশ্যই, আপনি ম্যানুয়ালি ফাংশনগুলি Function.prototype.Newব্যবহার করতে পারেন যা ব্যবহার করে তবে এটি কেবল ভার্চুয়াল এবং আটকানোই নয়, এটি (সংজ্ঞা অনুসারে) সীমাবদ্ধ হতে হবে। Functionকোডটি যে কোনও সংখ্যক আর্গুমেন্টের জন্য কাজ করতে দেয়।
evalজেএসপ্যাকার এর মতো অ্যাপ্লিকেশনগুলি যেভাবে পছন্দ করে তাতে কোডের বড় অংশগুলিতে আইএনগিংয়ের বিষয়ে আপনার কী ধারণা ? জেএসপ্যাকার + জিজিপ সাধারণত তার নিজের সমাধানের চেয়ে ছোট ফাইল আকারে ফলাফল দেয় তবে আপনি যথাযথভাবে উল্লেখ করেছেন যে এটি একই কোডের টুকরাটিতে দু'বার একটি সংকলক বর্ষণ করছে, সাথে স্ট্রিং প্রতিস্থাপনের জন্য কিছু ওভারহেড।