Странное поведение Chrome и Safari в Javascript - PullRequest
2 голосов
/ 11 июня 2010

Я написал код:

var a=function(){
};

a.name="test";
a.prop="test2";

Теперь, если я отлаживаю код с консоли:

console.log(a.name);
console.log(a.prop);

В Firefox я получаю a.name="test" и a.prop="test2" в то время как в Safari и Chrome я получаю a.prop="test2", но a.name="".

Кажется, что в браузерах Webkit невозможно назначить свойство "name" для функции.Ты знаешь почему?Но самое главное, знаете ли вы обходной путь для этого?

Ответы [ 5 ]

6 голосов
/ 11 июня 2010

Экземпляры функции имеют нестандартный атрибут name, который будет возвращать имя функции или пустую строку, если функция анонимна (как ваша). Браузеры будут реагировать по-разному при попытке записи в атрибут, поэтому я предлагаю использовать другое имя свойства.

0 голосов
/ 11 июня 2010

Как видите, «имя» не является опцией, поэтому:

var a = function(){
};


a.props={name:"test",prop:"test2",anyKey:"anyValue"};

может быть решением.

0 голосов
/ 11 июня 2010

Похоже, вы не можете изменить имя анонимной / лямбда-функции.Если вы хотите установить имя, вам нужно сделать что-то вроде var a=function b() {}, тогда вы можете установить имя.

0 голосов
/ 11 июня 2010

почему вы пытаетесь присвоить свойства методу?кажется, что это должно быть нарушением какой-то процедуры или практики.если вы хотите, чтобы и метод, и свойства были доступны, создайте новый объект, содержащий их.

0 голосов
/ 11 июня 2010

Некоторые слова зарезервированы в JS, но некоторые браузеры все еще поддерживают их.

Посмотрите здесь: http://www.quackit.com/javascript/javascript_reserved_words.cfm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...