Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Полифилл в анонимной функции (https://javascript.ru/forum/misc/74459-polifill-v-anonimnojj-funkcii.html)

NO_ONE 14.07.2018 10:47

Полифилл в анонимной функции
 
Здравствуйте!

Интересует следующий вопрос. В анонимной функции есть несколько полифиллов (для 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)

Aetae 14.07.2018 12:07

Будут(если конечно функция была вызвана заранее).
Эти полифилы расширяют глобальные объекты: Object, Element и String, а не что-то локальное внутри функции.


Часовой пояс GMT +3, время: 14:30.