কিছু কিছু বিষয় একটি 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
জেএসপ্যাকার এর মতো অ্যাপ্লিকেশনগুলি যেভাবে পছন্দ করে তাতে কোডের বড় অংশগুলিতে আইএনগিংয়ের বিষয়ে আপনার কী ধারণা ? জেএসপ্যাকার + জিজিপ সাধারণত তার নিজের সমাধানের চেয়ে ছোট ফাইল আকারে ফলাফল দেয় তবে আপনি যথাযথভাবে উল্লেখ করেছেন যে এটি একই কোডের টুকরাটিতে দু'বার একটি সংকলক বর্ষণ করছে, সাথে স্ট্রিং প্রতিস্থাপনের জন্য কিছু ওভারহেড।