this--그건 아실 거예요.

2080 단어
this: 함수가 실행될 때 귀속되는 것이지 함수를 작성할 때 귀속되는 것이 아니다. 그 상하문은 함수 호출 시 각종 조건에 달려 있다. this의 귀속과 함수의 성명은 아무런 관계가 없고 함수의 호출 방식에만 달려 있다(this는 함수 자체도 가리키지 않고 함수의 어법 작용역도 가리키지 않는다).

암시적 바인딩


대상 내부에 지향 함수의 속성을 포함하고 속성을 통해 간접적으로 함수를 인용하여this를 이 대상에 간접적으로 연결합니다.
var a=1;
function foo(){
    console.log(this.a);
}
var obj={
    a:2,
    foo:foo
};
obj.foo(); //      2
foo();// 

바인딩 표시


대상 내부에 함수 인용을 포함하지 않으려고 합니다. 대상에 함수 (apply () 와call (),bind () 를 강제로 호출합니다.
ply()와call()는 두 개의 매개 변수를 수신한다. 첫 번째 매개 변수는 하나의 대상이다. 즉, 이 대상을 this로 연결하고 두 번째 매개 변수는 수신하는 것이다.
var a=1;
function foo(){
    console.log(this.a);
}
var obj={
a:2,
};
foo.call(obj);// foo , this obj

bind() 함수를 바인딩하는 방법:
var a=1;
function foo(){
    console.log(this.a);
}
var obj={
    a:2,
};
var bar=foo.bind(obj);// bind() , apply() this obj
bar();

new () 바인딩:


먼저 명확히 해야 한다. 구조 함수는 사실 new 조작부호에 의해 호출된 일반 함수이고 new 호출 함수를 사용할 때 다음과 같은 조작을 실행한다. var bar=new Foo()를 가정한다.(1) 새 대상bar(2)를 만듭니다. 새 대상bar는 원형 연결을 실행합니다. (3) 새 대상bar는Foo() 함수 호출에 귀속된this(4) 함수Foo()가 다른 대상을 되돌려주지 않으면 new 표현식의 함수 호출은 자동으로 이 대상을 되돌려줍니다.
function Foo(a){
    this.a=a;
}
var bar=new Foo(2);
console.log(bar.a); // 2

간단하게 말하면 new 조작부호를 통해 새로운 대상을 만들고 구조 함수 호출 중인this에 연결합니다.

this 귀속 우선 순위


(1) 함수가 new 조작부호에 호출되었는지 여부입니다. 만약에this가 새로 만든 대상과 연결됩니다. (2) 함수가call (), apply (),bind () 를 통해 호출된다면,this는 지정한 대상과 연결됩니다. (3) 함수가 특정한 대상의 속성으로 이 대상에 호출되었을 때,this는 호출된 대상입니다.

화살표 함수 귀속this


화살표 함수는 함수 작용역이나 전역 작용역에 따라this를 지정합니다
var a=1;
function foo(){
    return (a)=>{console.log(this.a)};  // 
}
var obj={
    a:2,
};
foo.call(obj)();   // 2
// this obj , 

그러나 주의해야 할 것은 화살표 함수의 귀속은 수정할 수 없다는 것이다. 즉, obj에 귀속된this의 화살표 함수를 다시 다른 새로운 대상에 귀속시키면 두 번째 귀속은 무효다.
var a=1;
function foo(){
    return (a)=>{console.log(this.a)};
}
var obj={
    a:2,
};
var obj2={
    a:3,
}
foo.call(obj).call(obj2);   // 2

좋은 웹페이지 즐겨찾기