>  기사  >  웹 프론트엔드  >  js 함수 호출의 일반적인 방법에 대한 자세한 설명_기본 지식

js 함수 호출의 일반적인 방법에 대한 자세한 설명_기본 지식

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

출처: JavaScript 언어의 본질. 이것은 책의 소스 코드가 아닙니다.
js의 함수 호출은 this와 인수라는 두 가지 추가 매개변수를 무료로 제공합니다. 인수는 매개변수 그룹이고 실제 배열은 아니지만 .length 메서드를 사용하여 길이를 가져올 수 있습니다.
책에는 4가지 호출 모드가 있다고 나와 있습니다.
메서드 호출 모드
함수 호출 모드
생성자 호출 모드
호출 모드 적용

몇 가지 예를 더 자세히 살펴보겠습니다. 이해했다.
1: 메소드 호출 모드
이때 myobject를 가리킨다는 점에 유의하세요.

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

/*메소드 호출 모드*/
var myobject ={
값:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()

2: 함수 호출 모드
이때는 창을 가리킨다는 점에 유의하세요.
코드 복사 코드는 다음과 같습니다.

/*함수 호출 모드*/
var add =function(a,b){
alert(this)//이것은 창에 연결되어 있습니다
return a b;
}
var sum=add(3,4); >alert (sum)


3: 생성자 호출 패턴 Essence of JavaScript Language 책에서는 이 방법을 포기할 것을 권장합니다. 더 나은 방법이 있기 때문입니다. 여기서는 소개하지 않았습니다. 다음에 블로그에 올릴 때 포스팅하겠습니다.
여기에 링크가 추가됩니다.

코드 복사 코드는 다음과 같습니다.
/*생성자 호출 모드 포기됨*/
var quo=function(string){
this.status=string;
}
quo.prototype.get_status=function(){
return this.status; >var qq=new quo("aaa");
alert(qq.get_status())



4: 호출 모드 적용

== 더 유용한 적용 예를 볼 수 있습니다. 하단의 코드를 살펴보세요.

코드 복사 코드는 다음과 같습니다. /*적용*/
/ /사용법 주의 위의 sum 함수
//및 myobject
//이 호출 방법의 장점은 이것이 가리키는 객체를 가리킬 수 있다는 것입니다.
//apply의 첫 번째 매개변수는 이 포인터가 가리키는 개체입니다.
var arr=[10,20]
var sum=add.apply(myobject,arr)
alert( sum );


이 적용의 실제 적용을 확인하세요. 바인딩 시간을 바인딩하는 함수입니다.


코드 복사 코드는 다음과 같습니다. varbind=function(object,type, fn){
if(object.attachEvent){//IE 브라우저
object.attachEvent("on" type,(function(){
return function(event){
window.event. cancelBubble= true;//시간 버블링 중지
object.attachEvent=[fn.apply(object)];//----여기서 제가 이야기하고 싶은 내용은 여기에 있습니다
//attachEvent를 사용하여 IE에서의 시간
//이것은 객체 객체 자체를 가리키지 않으므로 우리가 바인딩한 함수의 this.id는 제대로 작동하지 않습니다.
//그러나 fn.apply(object)를 사용하면. .
//여기서 포인트인 Apply의 첫 번째 객체를 object로 변경한 것을 볼 수 있으므로 this.id는
//object.id >가 되어 정상적으로 동작합니다. }
})(object),false);
}else if(object.addEventListener){//기타 브라우저
object.addEventListener(type,function(event){
event.stopPropagation( );//시간 버블링 중지
fn.apply(this)
});
}
}
bind(document.getElementById("aaa"),"click" ,function( ){경고(this.id)})

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