이 작업 원리
함수를 객체 메소드라고하면이 객체에 할당됩니다.
다음과 같이 코드 코드를 복사하십시오.
var 부모 = {
방법 : function () {
Console.log (this);
}
};
parent.method ();
// <-parent
이 동작은 매우 "취약하다"는 점에 유의하십시오. 이것은 대부분의 개발자를 혼란스럽게합니다.
다음과 같이 코드 코드를 복사하십시오.
이 행소 ();
// <-window
이것을 바꾸십시오
.call, .apply 및 .bind 방법을 사용하여 함수를 호출하는 방법을 작동하여 기능에 전달 된 매개 변수 값과 매개 변수 값을 정의하는 데 도움이되었습니다.
function.prototype.call에는 여러 매개 변수가있을 수 있으며 나머지는 호출 기능으로 전달됩니다.
다음과 같이 코드 코드를 복사하십시오.
Array.prototype.slice.call ([[1, 2, 3], 1, 2)
// <- [2]
function.prototype.apply는 .call과 유사하지만 함수로 전달 된 매개 변수는 매개 변수가 아닌 배열입니다.
String.prototype.split.apply ('13 .12.02 ', ['. '])))
// <- [ '13', '12', '02']
function.prototype.bind는 항상 .bind로 전달되는 매개 변수를 .Bind로 전달할 수있는 값으로 전달되는 매개 변수와 매개 변수의 일부를 할당하고 원래 함수를 만들 수있는 Curride 버전을 생성합니다.
다음과 같이 코드 코드를 복사하십시오.
var arr = [1, 2];
var add = array.prototype.push.bind (arr, 3);
// arr.push (3)와 효과적으로 동일합니다.
추가하다 ();
// 효과적으로 ARR.PUSH (3, 4)
추가 (4);
Console.log (ARR);
// <- [1, 2, 3, 3, 4]
이것은 도메인 체인에서
다음 예에서는 도메인 체인에서 변경되지 않은 상태로 유지할 수 없습니다. 이것은 규칙의 결함이며 종종 아마추어 개발자에게 혼란을 초래합니다.
다음과 같이 코드 코드를 복사하십시오.
함수 스코핑 () {
Console.log (this);
return function () {
Console.log (this);
};
}
스코핑 () ();
// <-window
// <-window
이에 대한 참조를 유지하기 위해 로컬 변수를 생성하는 일반적인 방법이 있으며, 하위 액션 도메인에는 수명 변수가 없어야합니다. 하위 스코프에서 동일한 이름의 변수는 상위 점수에서 이에 대한 참조를 다룹니다. http://www.cnblogs.com/sosoft/
다음과 같이 코드 코드를 복사하십시오.
함수 retaining () {
var seelf = 이것;
return function () {
Console.log (self);
};
}
retaining () ();
// <-window
설명 할 수없는 이유 때문에이 값과 현재 값을 동시에 사용하고 싶지 않다면 .Bind 함수를 사용하는 것이 좋습니다. 이것은 하위 스코프를 지정하기 위해 부모 범위를 지정하는 데 사용될 수 있습니다.
다음과 같이 코드 코드를 복사하십시오.
function up () {) {)
return function () {
Console.log (this);
} .Bind (this);
}
부서지다 () ();
// <-window