>  기사  >  웹 프론트엔드  >  js_javascript 스킬의 적용 메소드 사용에 대한 자세한 분석

js_javascript 스킬의 적용 메소드 사용에 대한 자세한 분석

WBOY
WBOY원래의
2016-05-16 17:17:45980검색

1. 객체 상속에 대한 일반적인 접근 방식은 Object.extend를 복사하는 것입니다.
prototype.js의 구현은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

Object.extend = function(destination, source) {
for (소스의 속성) {
Destination[property ] = source[property];
}
return Destination;
}

또한 다음과 같은 또 다른 메서드가 있습니다. 물론 함수를 사용하여 호출할 수도 있습니다)

적용 메소드는 다른 객체의 메소드를 하이재킹하고 다른 객체의 속성을 상속받을 수 있습니다

Function.apply(obj, args) 메소드는 두 개의 매개변수를 받을 수 있습니다

obj: 이 개체는 Function 클래스의 이 개체를 대체합니다.

args: 이것은 함수에 매개변수로 전달되는 배열입니다(args-->arguments)

적용 데모 코드는

코드 복사 코드는

<script> <BR>function Person(name,age){ //클래스 정의, human <BR> this.name=name; //이름 <BR> this.age=age<BR> this.sayhello=function (){alert("hello")};<BR>} <BR>function Print(){ //클래스 속성 표시<BR> this.funcName="Print" <BR> this.show =function() { <BR> var msg=[];<BR> for(var key in this){ <BR> if(typeof(this[key])!="function"){<BR> msg.push ([키, ":",this[키]].join(""));<BR>                                                                                          >function 학생(이름, 나이, 학년, 학교){ //학생 클래스<BR> Person.apply(this ,arguments);<BR> Print.apply(this,arguments);<BR> this.grade=grade; //성적<BR> this.school=school //School<BR>} <BR>var p1= new Person("jake",10);<BR>p1.sayhello();<BR>var s1= new Student("tom",13,6,"Tsinghua Primary School");<BR>s1.show( );<BR>s1.sayhello();<BR>alert(s1.funcName);<BR>< /script><BR><BR><BR>학생 클래스에는 원래 메서드가 없지만 이후에는 Person.apply(this,arguments), <BR> <BR>그는 sayhello 메소드와 Person 클래스의 모든 속성을 가지고 있습니다. <BR> </script>
Print.apply(this,arguments) 후에 자동으로 show() 메소드를 얻습니다

2. Apply의 매개변수 배열을 사용하여 개선하세요

프로그램 성능 향상을 위한 Function.apply() 팁

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)) // 이는 불가능합니다. 꼭 이렇게 써주세요
함수 getMax(arr){
var arrLen=arr.length;
for(var i=0,ret=arr[0];i ret=Math. max(ret,arr[i]);   }

return ret;
}


이런 식으로 작성하는 것은 번거롭고 비효율적입니다. Apply를 사용한다면 코드를 보세요:



코드를 복사하세요
코드는 다음과 같습니다: function getMax2(arr ){ return Math.max.apply(null,arr);}

두 코드 조각은 동일한 목적을 달성하지만 getMax2가 훨씬 더 우아하고 효율적이며 간결합니다.

또 다른 예는 배열의 푸시 방법입니다.
var arr1=[1,3,4];
var arr2=[3,4,5];

arr2를 확장한 다음 arr1에 하나씩 추가하고 마지막으로 arr1=[1,3,4,3,4,5]
arr1.push(arr2)를 사용하면 분명히 작동하지 않습니다. . 이렇게 하면 [1,3,4,[3,4,5]]

를 얻게 됩니다.

루프를 사용하여 하나씩 푸시할 수만 있습니다(물론 arr1.concat(arr2)도 사용할 수 있지만 concat 메서드는 arr1 자체를 변경하지 않습니다)

코드 복사 코드는 다음과 같습니다.

var arrLen=arr2.length
for(var i=0;i arr1 .push(arr2[i]);
}

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