call()
메소드는 주어진 this
값 및 각자에게 제공된 인수를 갖는 함수를 호출합니다.
주의: 이 함수 구문은 apply()
와 거의 동일하지만, 근본 차이는 call()
은 인수 목록, 반면에 apply()
는 인수 배열 하나를 받는다는 점입니다.
구문
fun.call(thisArg[, arg1[, arg2[, ...]]])
매개변수
thisArg
fun
호출에 제공되는this
값.this
는 메소드에 의해 보이는 실제값이 아닐 수 있음을 주의하세요: 메소드가 비엄격 모드 코드 내 함수인 경우,null
및undefined
는 전역 객체로 대체되고 원시값을 객체로 변환됩니다.arg1, arg2, ...
- 객체를 위한 인수.
설명
서로 다른 this
객체가 기존 함수를 호출할 때 할당될 수 있습니다. this
는 현재 객체(호출하는 객체)를 참조합니다. call
로, 메소드를 일단 작성한 뒤 다른 객체에 상속할 수 있습니다, 새로운 객체를 위한 메소드를 재작성할 필요 없이.
예
객체의 생성자 연결에 call
사용
객체의 생성자 연결(chain)에 call
을 사용할 수 있습니다, Java와 비슷하게. 다음 예에서, Product
객체의 생성자는 name
및 price
두 매개변수로 정의됩니다. 다른 두 함수 Food
및 Toy
는 this
및 name
과 price
를 전달하는 Product
를 호출합니다. Product는 name
및 price
속성을 초기화하고, 전문화된 두 함수(Food 및 Toy)는 category
를 정의합니다.
function Product(name, price) { this.name = name; this.price = price; if (price < 0) { throw RangeError('Cannot create product ' + this.name + ' with a negative price'); } } function Food(name, price) { Product.call(this, name, price); this.category = 'food'; } function Toy(name, price) { Product.call(this, name, price); this.category = 'toy'; } var cheese = new Food('feta', 5); var fun = new Toy('robot', 40);
익명 함수 호출에 call
사용
순수하게 생성된 이 예에서, 익명 함수를 만들고 배열 내 모든 객체에서 이를 호출하기 위해 call
을 사용합니다. 여기서 익명 함수의 주목적은 모든 객체에 print 함수를 추가하는 겁니다, 배열 내 객체의 정확한 인덱스를 출력할 수 있는. this
값으로 객체 전달이 반드시 필요하지는 않았지만 설명 목적으로 했습니다.
var animals = [ { species: 'Lion', name: 'King' }, { species: 'Whale', name: 'Fail' } ]; for (var i = 0; i < animals.length; i++) { (function(i) { this.print = function() { console.log('#' + i + ' ' + this.species + ': ' + this.name); } this.print(); }).call(animals[i], i); }
함수 호출 및 'this'를 위한 문맥 지정에 call
사용
아래 예에서, greet을 호출하면 this 값은 객체 i에 바인딩됩니다.
function greet() { var reply = [this.person, 'Is An Awesome', this.role].join(' '); console.log(reply); } var i = { person: 'Douglas Crockford', role: 'Javascript Developer' }; greet.call(i); // Douglas Crockford Is An Awesome Javascript Developer
스펙
브라우저 호환성
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |