Object.defineProperty или .prototype?
Я видел два разных метода реализации не нативных функций в javascript. Первый:
if (!String.prototype.startsWith) {
Object.defineProperty(String.prototype, 'startsWith', {
enumerable: false,
configurable: false,
writable: false,
value: function(searchString, position) {
position = position || 0;
return this.lastIndexOf(searchString, position) === position;
}
});
}
а второй это:
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.lastIndexOf(searchString, position) === position;
}
Я знаю, что второй используется для присоединения любого метода к цепочке прототипов определенных стандартных встроенных объектов, но первый метод для меня новый. Кто-нибудь может объяснить, в чем разница между ними, почему кто-то используется, а почему нет, и каковы их значения.