많은 정보를 확인한 후 다음 세 가지 규칙으로 정리했습니다.
규칙 0: 함수 자체는 특수한 유형이므로 대부분의 경우 가능합니다. 변수로 여겨진다.
function a()
{
alert(this);
}
또는
var a = function()
{
alert(this)
}
변수를 생성한다고 생각하면 되는데, 이 변수의 값이 함수이다.
규칙 1: 함수가 객체의 키 값인 경우 this는 이 객체를 가리킵니다. 이 규칙은 이해하기 쉽습니다.
var a = function(obj)
{
alert(this == obj)
}
var o = {}; .afun = a;
o.afun(o); //true
함수는 변수이지만 객체에 바인딩될 수 있습니다. o 객체.
여기서 바인딩된 개체가 없으면 기본적으로 창 개체를 가리킨다는 점에 유의해야 합니다.
몇 가지 예:
function a ()
{
//this == 창
}
함수 a()
{
//this == 창
함수 b()
{
//this == window
}
}
또한 바인딩은 위의 중첩 함수, 바인딩과 같이 전이적이지 않다는 점에 유의해야 합니다. o 객체는 a 함수에 영향을 미치고
b는 여전히 창을 가리킵니다.
규칙 2: new 함수가 호출되면 객체가 생성되며 이는 새로 생성된 객체를 가리킵니다.
var o = new a();
이때 o는 더 이상 함수가 아니지만 실제로는 그런 과정이라고 볼 수 있습니다.
객체 var o = {};를 생성합니다.
이를 o로 지정하고 이를 통해 o를 초기화합니다.
규칙 3: Apply를 통해 포인터를 변경할 수 있습니다
이 Apply의 바인딩은 실제로 Apply의 기능과 유사합니다. 다음 기능 .
var a = function(obj)
{
alert(this == obj);
obj.fun = a;
obj.fun(obj);//true
, ok a.apply(obj, [obj]); // true
javascript는 간단히 바인딩할 위치가 없는 경우 기본적으로 창을 바인딩한다고 간주할 수 있습니다.
종합적인 예:
jquery에는 매우 일반적으로 사용되는 함수가 있는데, 이는 쉬운 작업을 위해 루프된 개체 요소를 여기에 바인딩할 수 있습니다.
다음은 간단한 데모입니다.
코드
function Each(tagName, 콜백)
{
var listed = document.getElementsByTagName(tagName)
for (var i = 0; i {
callback.apply(lists[i])
}
}
each("a",
function ()
{
this .style.color = "red";
}
);
내 헤더 탐색의 모든 링크가 빨간색으로 변한 것을 볼 수 있습니다.