js 에서 apply 방법의 사용 에 대한 상세 한 분석
1. 대상 의 계승, 일반적인 방법 은 복사: Object. extendeprototype. js 의 실현 방식 은:
코드 는 다음 과 같 습 니 다:
Object.extend = function(destination, source) {
for (property in source) {
destination[property] = source[property];
}
return destination;
}
그 밖 에 또 다른 방법 이 있 습 니 다. 바로 Function. apply (물론 Function. call 을 사용 해도 됩 니 다) 입 니 다.
apply 방법 은 다른 대상 을 납치 할 수 있 는 방법 으로 다른 대상 의 속성 을 계승 합 니 다.
Function. apply (obj, args) 방법 은 두 개의 인 자 를 받 을 수 있 습 니 다.
obj: 이 대상 은 Function 클래스 의 this 대상 을 대체 합 니 다.
args: 이것 은 배열 입 니 다. Function (args -- > arguments) 에 매개 변수 로 전 달 됩 니 다.
apply 시범 코드 는 다음 과 같 습 니 다.
코드 는 다음 과 같 습 니 다:
<script>
function Person(name,age){ // ,
this.name=name; //
this.age=age; //
this.sayhello=function(){alert("hello")};
}
function Print(){ //
this.funcName="Print";
this.show=function(){
var msg=[];
for(var key in this){
if(typeof(this[key])!="function"){
msg.push([key,":",this[key]].join(""));
}
}
alert(msg.join(" "));
};
}
function Student(name,age,grade,school){ //
Person.apply(this,arguments);
Print.apply(this,arguments);
this.grade=grade; //
this.school=school; //
}
var p1=new Person("jake",10);
p1.sayhello();
var s1=new Student("tom",13,6," ");
s1.show();
s1.sayhello();
alert(s1.funcName);
</script>
학생 류 는 본래 어떤 방법 도 갖 추 지 못 했 지만 Person. apply (this, arguments) 이후
그 는 Person 류 의 sayhello 방법 과 모든 속성 을 갖 추고 있다.
Print. apply (this, arguments) 이후 자동 으로 show () 방법 을 얻 었 습 니 다.
2 、 Apply 의 매개 변수 배열 화 를 이용 하여 향상
Function. application () 프로그램의 성능 향상 에 대한 기술
우 리 는 먼저 Math. max () 함수 부터 말 하면 Math. max 뒤에 임의의 인 자 를 연결 할 수 있 고 마지막 으로 모든 매개 변수의 최대 치 를 되 돌려 줍 니 다.
예 를 들 면
alert(Math.max(5,8)) //8
alert(Math.max(5,7,9,3,1,6)) //9
그러나 많은 경우 배열 에서 가장 큰 요 소 를 찾 아야 한다.
코드 는 다음 과 같 습 니 다:
var arr=[5,7,9,1]alert(Math.max(arr)) // 。
function getMax(arr){
var arrLen=arr.length;
for(var i=0,ret=arr[0];i<arrLen;i++){
ret=Math.max(ret,arr[i]);
}
return ret;
}
이렇게 쓰 는 것 은 번 거 롭 고 비효 율 적 이다.apply 를 사용 하면 코드 를 보 세 요.
코드 는 다음 과 같 습 니 다:
function getMax2(arr){
return Math.max.apply(null,arr);
}
두 단락 의 코드 는 같은 목적 을 달 성 했 지만 getMax 2 는 우아 하고 효율 적 이 며 간결 하 다.예 를 들 어 배열 의 push 방법.
var arr1=[1,3,4];
var arr2=[3,4,5];
만약 우리 가 arr 2 를 펼 친 후에 하나씩 arr 1 에 추가 하려 고 한다 면, 마지막 으로 arr 1 = [1, 3, 4, 3, 4, 5] arr1. push (arr 2) 는 분명히 안 된다.왜냐하면 이렇게 하면 [1, 3, 4, [3, 4, 5] 를 얻 을 수 있 기 때문이다.
우 리 는 하나의 순환 으로 하나의 push (물론 arr1. concat (arr2) 를 사용 할 수 있 지만, concat 방법 은 arr 1 자 체 를 바 꾸 지 않 습 니 다)
코드 는 다음 과 같 습 니 다:
var arrLen=arr2.length
for(var i=0;i<arrLen;i++){
arr1.push(arr2[i]);
}
애플 리 케 이 션 이 생기 면서 일이 이렇게 쉬 워 졌 다.
Array.prototype.push.apply(arr1,arr2)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.