this 기본 개념
2
)call()、apply()、bind()
)this
this -> this -> this
기본 개념
this는 항상 하나의 대상인
을 되돌려줍니다. 대상의 속성과 방법 함수는 다른 대상에게 부여할 수 있기 때문에 모든this가 가리키는 대상도 변덕스럽습니다. function foo () {
console.log('name :' + this.name);
}
var obj = { name: "obj1", foo: foo };
var obj2 = { name: "obj2", foo: foo };
var obj3 = { name: "obj3" };
obj.foo() // obj1
obj2.foo() // obj2
을 제공하여 하나의 대상을 인용하고this를 사용하면 더욱 간단명료한api를 얻을 수 있다.현식 전달 대상의 인용(eg: 함수 매개 변수 전달)은 코드를 혼란스럽고 유지하기 어렵게 만든다(eg: 전달 매개 변수의 개수가 문제).
할 수 있고 this
더 나아가
+
의 사용 대상의 속성과 방법 함수 처리 데이터를 확보하는 것이다** function foo() {
var a = 2;
this.bar = function() {
console.log(this.a)
}
this.bar();
}
foo();
또는
로 대체할 수 있다.**그러나this는 더욱 유연한 특성이 있기 때문에 모두가 사용한다. 항상 어법 작용역을 사용하면 프로그래밍의 편안한 구역으로 돌아가기 쉽다** function foo(num) {
console.log('foo ' + num);
// foo
this.count++;
}
foo.count = 0;
for(var i = 0; i < 5; i++) {
foo(i);
}
// foo
console.log(foo.count);
this ?
??
this
) 그래서this에 대한 지향은 함수의 호출 위치를 찾는 것이다.(브라우저가 자체로 가지고 있는 개발자 도구는 함수 호출 창고를 쉽게 볼 수 있다)
의 방법 상해** 콜 및 apply bind는 모두 Function 위에 정의된 방법입니다.***call apply는 호출 함수의 실행 결과를 되돌려줍니다.***bind는 내부this를 수정한 포장 함수를 되돌려줍니다.**
var n = 'bar';
var obj = {n: 'foo'}
function baz() {
console.log(this.n)
}
baz.call(obj); // foo
baz.call(window);
baz.call();
baz.call(null),
baz.call(undefined);
call에 기본 형식의 데이터를 전송한다. 이 기본 형식의 데이터는this var f = function () {
console.log(this);
};
f.call(5) // Number {[[PrimitiveValue]]: 5}
call에 포장된 값으로 전환되어 여러 개의 매개 변수를 전달할 수 있다. 첫 번째 매개 변수는 귀속이 필요한 대상이다.뒤의 매개 변수는 함수 호출의 전참 매개 변수 // bind
function bind(fun, obj) {
return function() { // bind
fn.apply(obj);
}
}
apply call bind 사용 전공략(4가지 사용 장면)
function bar(a, b) {
console.log(a + ',' + b);
}
는null/undefined를 빈 전송 var baz = bar.call(null, 1, 4) // 1, 4
var bak = bar.bind(null, 10);
bar(19) // 10,19
로 직접 사용하여 진공 대상 var øø = Object로 전달합니다.create(null); var baz = bar.call(ø, 1, 4) // 1, 4
function bindCopy(fn, obj) {
return function() {
fn.apply(obj, arguments); // call ** **
}
}
Function.prototype.bindCopy() {
var fn = this;
var obj = arguments[0];
var args = Array.prototype.slice(arguments, 1);
return function() {
fn.apply(obj, args)
}
}
중요 지식:var arr = [1, 4, 6, 7];
Math.max.apply(null, arr); // 7
function Parent() {
this.a = 'super';
this.Super = function() {
console.log(' Super ' + this. a);
}
}
var p = new Parent();
function Children (a) {
this.a = a;
Parent.call(this); //
}
var c = new Children(12);
c.Super() //
c.Super.call(p) // call
forEach와 유사한 방법을 스스로 실현해 보세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.