У меня есть метод, который отлично работает в Firefox, с помощью которого я могу определить имя экземпляра конкретного объекта javascript
Я так не думаю, потому что это невозможно в JavaScript. JS - это язык вызовов по значению; когда пишешь:
var temp= 'hello';
getVarName(temp);
это то же самое, что сказать:
getVarName('hello');
В этот момент ссылка на «temp» в качестве переменной теряется. Я предполагаю, что ваша функция getVarName в основном такова:
function getVarName(value) {
for (var name in window) {
if (window[name]===value)
return name;
}
}
Это будет работать в IE и других браузерах без Object.hasOwnProperty (); он просто вернет имя любой глобальной переменной, которая соответствует аргументу. Вызов hasOwnProperty () можно добавить к этой функции, чтобы немного уточнить ее, разрешив только прямые свойства окна (которые действуют как глобальные переменные, в том числе те, которые вы задали явно), а не какой-либо из его прототипов. Я предполагаю, что именно это делает ваша версия функции, но на практике она имеет очень небольшой эффект, поскольку почти ничего не наследуется в «окно» по прототипу.
Вы немного сбиваете с толку, помещая ваше «привет» в явный объект String (что очень необычно и редко бывает хорошей идеей), что позволяет иметь два разных объекта «привет», которые можно различить с помощью === компаратор идентичности, так что это будет работать:
var a= new String('hello!');
var b= new String('hello!');
getVarName(a); // 'a'
getVarName(b); // 'b' - distinguishable object from a
Но это все еще не мешает вам делать:
var a= new String('hello!');
var b= a;
getVarName(a); // 'a' or 'b', depending on implementation
getVarName(b); // the same 'a' or 'b' as in the previous call
Итак, хотя вы можете довольно безобидно проиграть вызов hasOwnProperty (), как указано выше, то, что вы делаете, не может работать должным образом, и вам, вероятно, стоит взглянуть на лучший способ достижения того, что вы делаете.