Ответ 1
В коде вы назначаете собственный метод для свойства настраиваемого объекта.
Когда вы вызываете support.animationFrame(function () {})
, он выполняется в контексте текущего объекта (т.е. поддержки). Для правильной работы функции nativeAnimationFrame она должна выполняться в контексте window
.
Итак, правильное использование здесь support.animationFrame.call(window, function() {});
.
То же самое происходит и с предупреждением:
var myObj = {
myAlert : alert //copying native alert to an object
};
myObj.myAlert('this is an alert'); //is illegal
myObj.myAlert.call(window, 'this is an alert'); // executing in context of window
Другой вариант - использовать Function.prototype.bind(), который является частью стандарта ES5 и доступен во всех современных браузерах.
var _raf = window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame;
var support = {
animationFrame: _raf ? _raf.bind(window) : null
};