Показать сообщение отдельно
  #1 (permalink)  
Старый 14.07.2018, 10:47
Интересующийся
Отправить личное сообщение для NO_ONE Посмотреть профиль Найти все сообщения от NO_ONE
 
Регистрация: 01.03.2014
Сообщений: 19

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

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