자바스크립트에 객체지향 기능이 나중에 추가됐는데, 호환성을 위해 이상한 것들이 많이 생겼습니다.
function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。 //输入结果为"Cat" animal.showName.call(cat,","); //animal.showName.apply(cat,[]);
그래서 call과 apply는 동적인 변경을 위한 것임을 알 수 있습니다. 이는 한 개체에는 특정 메서드가 없지만 다른 개체에는 있는 경우에 나타납니다. 호출 또는 적용을 사용하여 다른 개체의 메서드를 사용할 수 있습니다.
이 일반적으로 사용됩니다. document.getElementsByTagName을 통해 선택된 dom 노드는 배열과 유사한 배열입니다. Array에서는 push, pop 등의 메소드를 적용할 수 없습니다. 다음을 전달할 수 있습니다:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
이런 방식으로 domNodes는 Array 아래의 모든 메소드를 적용할 수 있습니다.