ИЕ 5.0 держит на борту JavaScript 1.3 - весьма урезанная вещь. Уже обсуждали как привести массивы к номральному виду имплементировав методы push, pop, slice, splice и другие. Теперь подумаем как поднять на ИЕ5.0 метод call и apply у функций. Эти методы позволяют запустить функцию в контексте любого обьекта, что очень удобно для создаваемых динамически различных обьектов.
Код | if(typeof(Function)!="undefined" && typeof(Function.prototype.call)!="function") Function.prototype.call=function(obj, args) { if(typeof(obj)!="object") return; //и так, создадим у обьекта новое рандомное не заюзанное поле, куда и включим функцию var name="_my_call_temp_name_"+Math.round(Math.random()*1000000); while(typeof(obj[name])!="undefined") name="_my_call_temp_name_".Math.round(Math.random()*1000000); obj[name]=this; //теперь вызовем усё что пришло var arg=""; for(var i=1; i<arguments.length; i++) arg+=", arguments["+i+"]"; eval("obj."+name+"("+arg.substr(2)+");"); //теперь подчистим за собой delete obj[name]; }
function test(arg1, arg2) { alert("Object field: "+this.field+"\nArgument 1: "+arg1+"\nArgument 2: "+arg2); } a={field:"pole!"}; test.call(a, "argument 1 !!!", "argument 2 !"); |
Аналогично пишеться apply. |