¿Qué es This en JavaScript?
8294 단어 javascriptthis
Por regla general this es una referencerencia que se crea cuando una función que es invocada, y su valordepende de el lugar en el cual esta invocación se realice.
암비토 글로벌
Si esta invocación no es llamada desde una función, this siempre hace reference reference al objeto window
console.log(this);
Window {window: Window, self: Window, …}
기능
En el caso de las funciones, el valor de this,dependerá exclusivamente de el lugar en el cual esta es invocada.
por Defecto, dentro de una función, this hace reference reference al objeto global window
function test(){
console.log(this);
}
test();
Window {window: Window, self: Window, …}
Nuestro escenario cambia totalmente si usamos "use strict"
"use strict"
function test(){
console.log(this);
}
test();
undefined
El uso estricto nos ayuda a no modificar el ámbito global 우연한 사고, por ejemplo:
function Cuadrado(ancho, alto) {
this.ancho = 100;
this.alto = 200;
}
const cuadrado = Cuadrado(50,60);
console.log(cuadrado);
undefined
페로 시 베모스 엘 발로 드 라스 변수 덴트로 델 오브제토 창
console.log(window.ancho,window.alto)
100,200
para prevenir esto, se necesita el uso de "엄격한 사용"
"use strict"
function Cuadrado(ancho, alto) {
this.ancho = 100;
this.alto = 200;
}
const cuadrado = Cuadrado(50,60);
console.log(cuadrado);
Uncaught TypeError: Cannot set property 'ancho' of undefined
no permitiendo modificar el valor de this en su ámbito local
En cambio, si agregamos a la declaración la palabra new, Generamos una nueva instancia de this
"use strict"
function Cuadrado(ancho, alto) {
this.ancho = 100;
this.alto = 200;
}
const cuadrado = new Cuadrado(50,60);
console.log(cuadrado);
Object {
alto: 200,
ancho: 100
}
생성자 델 오브제토와 함께 실현할 수 있는 아호라 명령
"use strict"
function Cuadrado(ancho, alto) {
this.ancho = ancho;
this.alto = alto;
console.log (this);
}
const cuadrado = new Cuadrado(50,60);
Object {
alto: 60,
ancho: 50
}
메토도스
Cuando llamamos a un metodo de una función, this se asocia al objeto que contiene dicho método
const cuadrado = {
ancho: 100,
alto: 200,
info() {
console.log('Soy un cuadrado de',this.ancho, 'x',this.alto);
console.log(this);
}
};
cuadrado.info();
Soy un cuadrado de 100 x 200
Object {ancho: 100, alto: 200, info: ƒ...}
Ahora todo cambiaría, si asignamos el metodo a una declaración de función
const cuadrado = {
ancho: 100,
alto: 200,
info() {
console.log('Soy un cuadrado de',this.ancho, 'x',this.alto);
console.log(this);
}
};
let mostrarInfo = cuadrado.info;
mostrarInfo();
Soy un cuadrado de undefined x undefined
Window {window: Window, self: Window, …}
Acá perdemos el contexto de this, ya que la llamada ocurre bajo el ámbito global
화살표 함수
Al momento de crear un arrow function, el valor de this quedará asociado al valor de this de su ámbito externo
const test = () => {
console.log(this);
};
test();
Window {window: Window, self: Window, …}
Antes de usar arrow functions, para poder manejar los valores del ámbito global dentro de metodos, debíamos usar un "hack"que era copiar el valor de this a otra variable
const cuadrado = {
ancho: 100,
agrandar() {
const _this = this;
setInterval(function () {
console.log(++_this.ancho);
}, 1000);
}
};
cuadrado.agrandar();
Solucionar esto con el uso de arrow function es mucho más limpio
const cuadrado = {
ancho: 100,
agrandar() {
setInterval(() => {
console.log(++this.ancho);
}, 1000);
}
};
cuadrado.agrandar();
묶다
Existen adicionalmente, metodos que nos permiten modificar la referencencia a donde apunta this
Veamos este ejemplo
const cuadrado = {
ancho: 200,
alto: 100,
showDimensions: function() {
return this.ancho + ' x ' + this.alto;
}
}
const print = function() {
console.log(this.showDimensions());
}
print();
Uncaught TypeError: this.showDimensions is not a function
this en la función print apunta a la referenced del objeto en el ámbito global, ergo no tiene acceso a showDimensions
En caso que necesitemos acceder al scope de cuadrado desde print necesitamos usar el metodo bind()
const printBinded = print.bind(cuadrado);
printBinded();
De esta forma, le estamos diciendo que el valor de this en print, debe ser la referencencia al de cuadrado
부르다
La diferencia con Bind, es que este metodo, si ejecuta la función, igual que (), con la diferencia que Call tiene como parametro la reference de this en la función que se ejecuta.
const printBinded = print.bind(cuadrado);
printBinded();
Con este obtendremos el mismo resultado que con Bind, con la diferencia que la función no se copia, si no que se ejecuta.
적용하다
La diferencia entre Call y Apply, es tan solo la forma de envira los parametros, en el caso de apply esta orientado a recibir muchos parametros, en forma de array
print.apply(cuadrado, ['100', '200']);
차용
Un prestamo de función es cuando compartimos la función de un objeto, pero con distintos parametros
const cuadrado = {
ancho: 100,
alto: 200,
showDimensions: function() {
return this.ancho + ' x ' + this.alto;
}
}
const rectangulo = {
ancho: 500,
alto: 200
}
const result = cuadrado.showDimensions.apply(rectangulo);
console.log(result);
500 x 200
카레
El concepto decuring es básicamente crear una copia de una función pero con parametros por defecto
예:
function showDimensions(a, b) {
return a + ' x ' + b;
}
const showDimensionsCopy = showDimensions.bind(this, 200);
console.log(showDimensionsCopy(100));
"200 x 100"
표지 사진 작성자@bradstallcup
Reference
이 문제에 관하여(¿Qué es This en JavaScript?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gonzabarrera/que-es-this-en-javascript-3dn4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)