자바스크립트에서 이 키워드를 변경하는 방법 예에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2017-07-20 14:48:49
원래의
1252명이 탐색했습니다.

이것은 JavaScript의 키워드입니다. 함수가 다른 상황에서 사용됨에 따라 this의 값이 변경됩니다. 그러나 항상 원칙이 있습니다. 즉, 함수를 호출하는 객체를 참조한다는 것입니다.

이것은 일반적으로 현재 호출자를 가리키지만 다른 방법으로 변경할 수도 있습니다. 아래에 세 가지 방법이 소개됩니다.

1 호출이 상속으로 사용되는 경우:

function Parent(age){
this.name=['mike','jack','smith'];
this.age=age;
}
function Child(age){
Parent.call(this,age);//把this指向Parent,同时还可以传递参数
}
var test=new Child(21);
console.log(test.age);//21
console.log(test.name);
test.name.push('bill');
console.log(test.name);//mike,jack,smith,bill
로그인 후 복사

2. call과 Apply 모두 이 지점을 로 변경할 수 있지만 Apply의 두 번째 매개변수는 해시 분포이고 call은 배열일 수 있습니다.

console.log(Math.max.apply(null,[1,2,3,4]));//4
로그인 후 복사

Apply() 메서드는 두 개의 매개변수를 받습니다. 하나는 해당 범위에서 함수를 실행하는 것입니다. 이고 다른 하나는 매개변수 배열입니다. 그 중 두 번째 매개변수는 Array의 인스턴스이거나 인수 객체일 수 있습니다. call() 메소드는 apply() 메소드와 동일한 효과를 가지며, 매개변수를 수신하는 방식만 다릅니다. call()
메소드의 경우 첫 번째 매개변수는 변경되지 않는 this 값입니다. 변경되는 점은 나머지 매개변수가 함수에 직접 전달된다는 것입니다. 즉, call() 메소드를 사용할 때 함수에 전달되는 매개변수를 하나씩 열거해야 한다.

3.ES5는 또한 :bind() 메소드를 정의합니다. 이 메소드는 함수의 인스턴스를 생성하고 이 값은 바인딩() 함수에 전달된 값에 바인딩됩니다. 예를 들어

window.color='red';
var o={color:'blue'};

function sayColor(){
console.log(this.color);
}
var objectSaycolor=sayColor.bind(o);
//var objectSaycolor=sayColor.bind();
objectSaycolor();//blue
로그인 후 복사

여기서 sayColor()는 바인딩()을 호출하고 객체 o를 전달하여 objectSayColor() 함수를 생성합니다. objectSayColor() 함수의 this 값은 o와 같기 때문에 전역 범위에서 이 함수를 호출하더라도 파란색으로 표시됩니다.

call 메서드:

구문: ​​call(thisObj, Object)

정의: 개체의 메서드를 호출하여 현재 개체를 다른 개체로 바꿉니다.

설명:

call 메서드를 사용하면 다른 개체 대신 메서드를 호출할 수 있습니다. call 메소드는 함수의 객체 컨텍스트를 초기 컨텍스트에서 thisObj가 지정한 새 객체로 변경합니다.

thisObj 매개변수가 제공되지 않으면 전역 개체가 thisObj로 사용됩니다.

적용 방법:

구문: ​​apply(thisObj, [argArray])

정의: 특정 개체의 메서드를 적용하고 현재 개체를 다른 개체로 바꿉니다.

참고:

argArray가 유효한 배열이 아니거나 인수 개체가 아닌 경우 TypeError가 발생합니다.
argArray나 thisObj가 모두 제공되지 않으면 전역 개체가 thisObj로 사용되며 매개 변수를 전달할 수 없습니다.

코드 예:

function Animal(name) {
   this.name = name;
   this.showName = function() {
     console.log(this.name);
   };
 }
 function Cat(name) {
   Animal.call(this, name);
 }
 Cat.prototype = new Animal();
 function Dog(name) {
   Animal.apply(this, name);
 }
 Dog.prototype = new Animal();
 var cat = new Cat("Black Cat"); //call必须是object
 var dog = new Dog(["Black Dog"]); //apply必须是array
 cat.showName();
 dog.showName();
 console.log(cat instanceof Animal);
 console.log(dog instanceof Animal);
로그인 후 복사

위 내용은 자바스크립트에서 이 키워드를 변경하는 방법 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!