이를 JS에서 포인팅하는 방법과 호출 및 적용 기능_기초지식

php中世界最好的语言
풀어 주다: 2018-05-12 11:38:04
원래의
1304명이 탐색했습니다.

이 글은 기본적인 JS 콘텐츠인 이 포인터와 관련 지식 포인트를 공유하고 관심 있는 친구들이 배우고 참고할 수 있습니다.

특정 실제 응용에서는 함수를 정의할 때 이 점을 결정할 수 없지만, 실행 환경에 따라 크게 다음 세 가지 유형으로 나눌 수 있습니다.

1. 함수가 다음과 같은 경우 일반 함수가 호출되면 전역 객체를 가리킵니다

2. 함수가 객체의 메서드로 호출되면 객체를 가리킵니다

3. 생성자, 이는 새로 생성된 객체를 가리킵니다

예제 1:

window.name = 'myname';
function getName() {
  console.log(this.name);
}
getName(); //输出myname
로그인 후 복사

예제 2:

var boy = {
  name: 'Bob',
  getName: function() {
    console.log(this.name);
  }
}
boy.getName(); //输出Bob
로그인 후 복사

예제 3:

function Boy(name) {
  this.name = name;
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Bob
로그인 후 복사

예제 3에는 또 다른 특별한 경우가 있습니다. constructor는 "return"을 통해 객체를 반환하는데, 이번에는 연산의 최종 결과가 새로 생성된 객체가 아닌 이 객체이므로 이 경우에는 쓸모가 없습니다.

예 4:

function Boy(name) {
  this.name = name;
  return { //返回一个对象
    name: 'Jack'
  }
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Jack
로그인 후 복사

예 5:

function Boy(name) {
  this.name = name;
  return 1; //返回非对象
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Bob
로그인 후 복사

호출 및 적용의 역할

apply는 함수 본문에서 this의 포인터를 두 개 허용합니다. 두 번째 매개변수 매개변수는 호출된 함수의 매개변수 목록 을 전달하는 데 사용되는 배열 또는 유사 배열입니다.

예제 1:

function getInfo() {
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
  name: 'Bob',
  age: 12
}
getInfo.apply(boy1,['sing','swimming']); //输出Bob like sing and swimming
로그인 후 복사

call 전달되는 매개변수의 개수는 고정되지 않습니다. 적용과 마찬가지로 첫 번째 매개변수도 함수 본문에서 이 지점을 지정하는 데 사용됩니다. 매개변수는 호출된 함수에 차례로 전달됩니다.

예 2:

function getInfo() {
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
  name: 'Bob',
  age: 12
}
getInfo.call(boy1,'sing','shopping'); //输出Bob like sing and shopping
로그인 후 복사

게다가 대부분의 고급 브라우저는 바인딩 메서드도 구현합니다. 호출과 적용의 차이점은 바인딩이 함수 내에서 이 포인터만 변경하지만 즉시 실행되지는 않는다는 것입니다. . 명시적으로 호출해야 합니다.

예제 3: 브라우저의 바인딩 방법 시뮬레이션

Function.prototype.bind = function(obj){
  var self = this;
  return function(){
    return self.apply(obj,arguments);
  }
};
var obj = {
  name: 'Bob',
  age: 12
};
var func = function(){
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}.bind(obj);
func('sing','shopping');
로그인 후 복사

Lost this

어떤 경우에는 this에 대한 포인터가 손실될 수 있습니다. 이때 변경하려면 호출, 적용 및 바인딩을 사용해야 합니다. it 이것의 포인팅 문제입니다.

예제 1: "boy" 객체의 property로 "getName" 메소드가 호출되면 이는 "boy" 객체를 가리킵니다. 다른 변수 "getName" 메소드를 참조하면 이 메소드가 호출되기 때문입니다. 일반 함수이므로 이것은 전역 객체 window를 가리킨다

var boy = {
  name: 'Bob',
  getName: function() {
    console.log(this.name);
  }
}
boy.getName(); //输出Bob
var getBoyName = boy.getName;
getBoyName(); //输出undefined
로그인 후 복사

예2: 함수 내부에 함수가 정의되어 있어도 일반 객체로 호출하면 이것도 window 객체를 가리킨다

var boy1 = {
  name: 'Bob',
  age: 12,
  getInfo: function() {
    console.log(this.name);
    function getAge() {
      console.log(this.age);
    }
    getAge();
  }
}
boy1.getInfo(); //Bob
        //undefined
로그인 후 복사

나는 믿는다 이 기사의 사례를 읽으신 후 방법을 마스터하셨습니다. 더 흥미로운 정보를 보려면 오셔서 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

vue에서 개인 정보 보기 및 비밀번호 변경 방법

Vue 데이터 응답성 원칙 분석

위 내용은 이를 JS에서 포인팅하는 방법과 호출 및 적용 기능_기초지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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