Функции и конструкторы в javaScript по сути все безымянны, когда мы создаём функцию, мы обычно создаём ещё и ссылку на функцию И имеем дело в дальнейшем с именами переменных ссылок, но ни как не с именами функций или конструторов.
a=function(x,y){
alert(x+y);
}
b=a; //дадим функции имя b
c=a; //дадим функции имя c
a(1,1); // вызовем функцию с именем а
delete a; // УДАЛИМ первое имя функции
b(1,2); // второе имя функции (работает несмотря на то что первое имя исчезло)
c(2,3); // третье имя функции (работает несмотря на то что первое имя исчезло)
Декларативная запись даст тот же эффект.
function a(x,y){
alert(x+y);
}
b=a; //дадим функции имя b
c=a; //дадим функции имя c
a(1,1); // вызовем функцию с именем а
delete a; // УДАЛИМ первое имя функции
b(1,2); // второе имя функции (работает несмотря на то что первое имя исчезло)
c(2,3); // третье имя функции (работает несмотря на то что первое имя исчезло)
уневерсальный метод меняющий "имя функции" в обьекте context.
// метод
function changeName (context,oldname,newname) {
context[newname]=context[oldname];
delete context[oldname]; // удаляем старое имя из обьекта
}
// проверка
test={
functest: function(){
alert ("привет");
}
};
// заменим старое имя functest, на новое testNewName
changeName(test, "functest", "testNewName");
// обратимся к функции по новому имени
test.testNewName();
функция даже сама может поменять своё имя, а при необходимости даже самоликвидироваться, унечтожив последнюю ссылку на себя.
test={
functest: function(){
alert ("привет");
// если мы ещё не меняли то поменяем имя функции
if (this.functest) {
this["newnamefunc"]=this.functest;
delete this.functest; // удалим старое имя функции
}
}
}
// обратимся к функции, функция сменит своё имя
test.functest();
// обратимся к функции по новому имени
test.newnamefunc();
// попробуем обратится по старому имени, и получим ошибку
test.functest();