Переопределение window.alert и передача нескольких параметров

Я пытаюсь переопределить window.alert для передачи нескольких параметров.

Кто-то объясняет меня, почему для/в наследовал тело Array.prototype.tester в список?

Большое спасибо.

Array.prototype.tester = function() {
    return 'tester';
}

window.alert = function() {
    var args = Array.prototype.slice.call(arguments);
    var list = [];

    for (var i in args) {
        list.push(args[i]);
    }

    return list.join(', '); // WHY???? alerts: "arg1, arg2, function () { return "tester"; }"
    //return args.join(', '); // alerts: "arg1, arg2" expected.
}

alert('arg1', 'arg2');
1
задан Nizzy 20 July 2010 в 06:05
поделиться

3 ответа

Как упоминалось в casablanca , for in выполняет итерацию по свойствам, определенным вами, которые находятся в цепочке прототипов объектов.

Чтобы исправить это, используйте hasOwnProperty () .

for (var i in args) {
    if (args.hasOwnProperty(i)) {
        list.push(args[i]);
    }
}
0
ответ дан 2 September 2019 в 22:56
поделиться

window.alert - это константная функция, вы не можете переопределить ее напрямую:

Javascript переопределяет alert

0
ответ дан 2 September 2019 в 22:56
поделиться

for-in выполняет итерацию по всем перечислимым свойствам объекта, которая включает все, что определено в объекте или его прототипах. Большинство встроенных функций объявлены неперечислимыми, поэтому они не появляются во время обычной итерации. ECMAScript 5 позволяет определять собственные свойства как неперечислимые, хотя я не уверен, какие браузеры это поддерживают:

function testerFunc() {
  return 'tester';
}

Object.defineProperty(Array.prototype, 'tester', {
  value: testerFunc,
  writable: true,
  enumerable: false,
  configurable: true
});
2
ответ дан 2 September 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: