Iniciar un nuevo proyecto con Vue.js generará automáticamente una plantilla que está configurada para trabajar con ESLint. ESLint es una herramienta de linter conectable y configurable que te ayuda a identificar e informar malos patrones en JavaScript, para que puedas mantener la calidad de tu código con facilidad. Si comienzas a programar sin control, probablemente puedas introducir algunas prácticas que no son buenas para ESLint. Por ejemplo, una de las cosas más simples como comprobar que algún objeto tiene una propiedad específica:
let events = {"some-index": false};
let key = "some-index";
if(events.hasOwnProperty(key)){
// Hacer algo ...
console.log("El objeto tiene la propiedad");
}
Esto desencadenaría la excepción mencionada cuando intentes compilar tu aplicación, debido a la regla no-prototype-builtins
. En ECMAScript 5.1, Object.create
se agregó el método, que permite la creación de objetos con un [[Prototipo]] específico. Object.create (null) es un patrón común que se utiliza para crear objetos que se utilizarán como mapa. Esto puede dar lugar a errores cuando se supone que los objetos tendrán propiedades de Object.prototype
. La regla no-prototype-builtins
evita llamar a métodos Object.prototype
directamente desde un objeto. Para obtener más información sobre las incorporaciones sin prototipos, visita la documentación oficial de ESLint aquí.
En este artículo, compartiré contigo diferentes formas de evitar que aparezca este error al intentar construir tu aplicación.
Soluciones
Hay varias formas de evitar este error, la primera es simplemente acceder a hasOwnPropertyMethod desde el prototipo de Object y ejecutar la función usando call:
let events = {"some-index": false};
let key = "some-index";
if(Object.prototype.hasOwnProperty.call(events, key)) {
// Esto se ejecutaria sin desencadenar la excepcion
console.log("El objeto tiene la propiedad");
}
Una forma equivalente de verificar si el objeto tiene la propiedad, siempre que no hayas hecho nada para que las propiedades no sean enumerables:
let events = {"some-index": false};
let key = "some-index";
if({}.propertyIsEnumerable.call(events, key)) {
// Esto se ejecutaria sin desencadenar la excepcion
console.log("El objeto tiene la propiedad");
}
O a través del método getOwnPropertyDescriptor
:
let events = {"some-index": false};
let key = "some-index";
if(!!Object.getOwnPropertyDescriptor(events, key)) {
// Esto se ejecutaria sin desencadenar la excepcion
console.log("El objeto tiene la propiedad");
}
Que te diviertas ❤️!
Conviertete en un programador más sociable