js 시 뮬 레이 션 구현 call, apply, bind
9092 단어 자바 script
문법
fun.call(thisArg, arg1, arg2, …)
매개 변수
fun 함수 가 실 행 될 때 지정 한 this 값 입 니 다.주의해 야 할 것 은 지정 한 this 값 이 반드시 이 함수 가 실 행 될 때 진정한 this 값 은 아 닙 니 다. 이 함수 가 non - strict mode 에 있 으 면 null 과 undefined 로 지 정 된 this 값 은 자동 으로 전체 대상 (브 라 우 저 에서 window 대상) 을 가리 키 는 동시에 값 이 원시 값 (숫자, 문자열, 불 값) 인 this 는 이 원시 값 의 자동 포장 대상 을 가리 키 는 것 입 니 다.arg 1, arg 2, 지정 한 매개 변수 목록 입 니 다.
반환 값
호출 자가 제공 하 는 this 값 과 매개 변 수 를 사용 하여 이 함수 의 반환 값 을 호출 합 니 다.이 방법 이 값 을 되 돌려 주지 않 으 면 undefined 로 돌아 갑 니 다.
Function.prototype.apply()
문법
func.apply(thisArg, [argsArray])
매개 변수
선택 적func 함수 가 실 행 될 때 사용 하 는 this 값 입 니 다.this 는 이 방법 에서 보 이 는 실제 값 이 아 닐 수 있 습 니 다. 이 함수 가 엄격 하지 않 은 모드 에 있 으 면 null 또는 undefined 로 지정 할 때 전역 대상 으로 자동 으로 바 뀌 고 원본 값 은 포 장 됩 니 다.argsArray 에서 선택 할 수 있 습 니 다.하나의 배열 이나 클래스 배열 대상, 그 중의 배열 요 소 는 단독 매개 변수 로 func 함수 에 전 달 됩 니 다.이 매개 변수의 값 이 null 또는 undefined 라면 어떠한 매개 변수 도 들 어 올 필요 가 없다 는 것 을 의미 합 니 다.ECMAScript 5 부터 클래스 배열 대상 을 사용 할 수 있 습 니 다.
반환 값
this 값 과 매개 변 수 를 지정 한 함수 의 결 과 를 호출 합 니 다.
Function.prototype.bind()
문법
function.bind(thisArg[, arg1[, arg2[, …]]])
매개 변수
바 인 딩 함 수 를 호출 할 때 this 매개 변수 로 목표 함수 에 전달 하 는 값 입 니 다.new 연산 자 구조 바 인 딩 함 수 를 사용 하면 이 값 을 무시 합 니 다.bind 를 사용 하여 setTimeout 에서 함 수 를 만 들 때 (리 셋 으로 제공) thisArg 로 전달 하 는 모든 원시 값 은 object 로 변 환 됩 니 다.bind 함수 의 매개 변수 목록 이 비어 있 으 면, 역할 영역 을 실행 하 는 this 는 새로운 함수 의 thisArg 로 간 주 됩 니 다.arg 1, arg 2,... 목표 함수 가 호출 될 때 바 인 딩 함수 의 매개 변수 목록 에 미리 추가 합 니 다.
반환 값
원 함수 의 복사 본 을 되 돌려 주 고 지정 한 this 값 과 초기 인 자 를 가지 고 있 습 니 다.
시 뮬 레이 션 은 다음 과 같 습 니 다.
Function.prototype.mycall = function(context) {
var context = context || window;
// context
context.fn = this;
//
var args = [...arguments].slice(1);
//
var result = context.fn(...args);
// fn
delete context.fn;
//
return result;
}
Function.prototype.myapply = function(context) {
var context = context || window;
context.fn = this;
var result = null;
if(arguments[1]) {
result = context.fn(...arguments);
}else {
result = context.fn();
}
delete context.fn;
return result;
}
Function.prototype.mybind = function(context) {
if(typeof this !== 'function') {
throw new TypeError('Error');
}
var _this = this;
var args = [...arguments].slice(1);
return function F() {
if(this instanceof F) {
return new _this(...args, ...arguments);
}
return _this.apply(context, args.concat(...arguments));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.