Полифилл в анонимной функции
Здравствуйте!
Интересует следующий вопрос. В анонимной функции есть несколько полифиллов (для Object.assign, element.remove(), string.endsWith(), string.startsWith()). Все эти фишки соответственно используются в теле функции ниже по коду. Сама анонимная функция - это отдельный .js файл, подключаемый в head: // file.js !function (b, c, d, e) { Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(a,b){"use strict";if(void 0===a||null===a)error("Cannot convert first argument to object");for(var c=Object(a),d=1;d<arguments.length;d++){var e=arguments[d];if(void 0!==e&&null!==e)for(var f=Object.keys(Object(e)),g=0,h=f.length;g<h;g++){var i=f[g],j=Object.getOwnPropertyDescriptor(e,i);void 0!==j&&j.enumerable&&(c[i]=e[i])}}return c}}); "remove" in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}); String.prototype.endsWith||Object.defineProperty(String.prototype,"endsWith",{value:function(a,b){var c=this.toString();(void 0===b||b>c.length)&&(b=c.length),b-=a.length;var d=c.indexOf(a,b);return d!==-1&&d===b}}); String.prototype.startsWith||Object.defineProperty(String.prototype,"startsWith",{enumerable:!1,configurable:!1,writable:!1,value:function(a,b){return b=b||0,this.lastIndexOf(a,b)===b}}); // some code... }(arg1,arg2,arg3,arg4); // end of file.js А если я использую, например, string.endsWith() или любую другую фишку вне файла, допустим, в body страницы, эти полифиллы уже не будут работать из-за области видимости? Можно ли их как-то "распространить" на весь window и при этом не выносить из функции? Просьба не сильно запинывать ногами, я в процессе изучения. x) |
Будут(если конечно функция была вызвана заранее).
Эти полифилы расширяют глобальные объекты: Object, Element и String, а не что-то локальное внутри функции. |
Часовой пояс GMT +3, время: 14:30. |