출처: 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 );
이 적용의 실제 적용을 확인하세요. 바인딩 시간을 바인딩하는 함수입니다.
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)})