Object.defineProperty ou .prototype?
Eu vi duas técnicas diferentes de implementação de recursos não nativos em javascript. Primeiro, é:
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;
}
});
}
e segundo é:
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.lastIndexOf(searchString, position) === position;
}
Eu sei que o segundo é usado para anexar qualquer método à cadeia de protótipos de objetos internos padrão específicos, mas a primeira técnica é nova para mim. Alguém pode explicar qual é a diferença entre eles, por que alguém é usado e por que não e quais são seus significados.