>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 메소드 호출에 대한 자세한 소개

JavaScript의 메소드 호출에 대한 자세한 소개

PHPz
PHPz원래의
2016-05-16 16:23:301159검색

이 글에서는 자바스크립트에서 메소드 호출에 대한 자세한 소개를 주로 소개합니다. 자바스크립트에서는 함수가 객체에 속해 있는 경우 객체를 통해 함수에 접근하는 행위를 '메서드 호출'이라고 합니다. .

자바스크립트에서는 함수가 객체에 속해 있는 경우 객체를 통해 함수에 접근하는 행위를 '메서드 호출'이라고 합니다. 일반적인 함수 호출과 달리, 메서드 호출을 할 때 함수의 this 참조가 변경됩니다. 이는 함수를 호출하는 데 사용되는 객체를 참조합니다(객체는 메서드 호출의 호출 컨텍스트가 됩니다).

var x = 99;
var sample = {
  x:1,
  act:function(a){
    this.x = a*a;//assign value to sample's x, not global object's x.
  }
}
sample.act(6);
console.log(sample.x);//36
console.log(x);//9

객체의 속성에 액세스하는 것과 마찬가지로 도트 연산자를 사용하는 것 외에도 JavaScript에서는 대괄호 연산자를 사용하여 메서드를 호출할 수도 있습니다.

//other ways to invoke method
sample["act"](7);
console.log(sample.x);//4

JavaScript 함수의 경우 더 흥미로운 동작입니다. 함수(클로저)가 함수에 포함될 수 있다는 것입니다. 메서드 호출을 할 때 메서드 함수에 포함된 함수가 있으면 포함된 함수의 코드는 외부 변수 값에 액세스할 수 있습니다.

//nested function can access variable outside of it.
var y = 88;
var sample2 = {
  y:1,
  act2:function(a){
    this.y = inner();
    function inner(){
      return a*a;
    }
  }
}
sample2.act2(8);
console.log(sample2.y);//64
console.log(y);//88

그러나 직관과 달리 포함된 함수는 내부 코드는 외부에서 이것을 상속받을 수 없습니다. 즉, 포함된 함수에서 this는 메서드를 호출하는 개체가 아니라 전역 개체를 참조합니다.

//nested function does not inherit "this". The "this" in nested function is global object
var sample3 = {
  act3:function(){
    inner();
    function inner(){
      console.log(this);//window object
    }
  }
}
sample3.act3();

정말 필요한 경우 함수 삽입 메서드를 호출하는 개체에 액세스하려면 이 값을 외부 함수의 변수에 저장할 수 있습니다.

//pass "this" to nested function
var sample4 = {
  act4:function(){
    var self = this;
    inner();
    function inner(){
        console.log(self);//Object {act4=function()}
    }
  }
}
sample4.act4();

위 내용은 이 장의 전체 내용입니다. 자바스크립트 동영상 튜토리얼!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.