>웹 프론트엔드 >JS 튜토리얼 >자바스크립트에 대한 심층적인 이해_javascript 스킬

자바스크립트에 대한 심층적인 이해_javascript 스킬

WBOY
WBOY원래의
2016-05-16 18:49:051138검색

최근 프로토타입, Ext 코어 등 JavaScript 라이브러리 소스 코드를 많이 읽었습니다. 이 개념은 이러한 라이브러리에서 많이 사용됩니다. 나는 어제 "자바스크립트 왕의 귀환"이라는 책을 읽고 나서야 이 사실을 깊이 이해하게 되었습니다.
요약하자면:
1. 함수 호출자와 소유자
자바스크립트에는 함수에 대한 호출자와 소유자라는 두 가지 개념이 있습니다. 호출자는 함수를 호출하는 개체를 참조하며 일반적으로 함수에 대한 참조입니다. 현재 함수를 호출한 경우 caller=null입니다. 대부분의 브라우저의 JavaScript 구현은 caller 속성을 사용하여 얻을 수 있습니다(이것은 ECMAScript 사양의 일부가 아니므로 주의해서 사용하세요). 이는 다음 코드를 보면 잘 알 수 있습니다.

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

function a(){
alert('fun a caller=' a.caller)
}
function b(){
a()
}
a () ;
b();

----------
작업 결과로 두 개의 대화 상자가 표시됩니다.
1.
fun a caller=null;
fun a caller=function b(){
a()
---------- ---- ------------
소유자는 함수를 호출하는 객체를 말합니다(동적 개념). 함수 본문에서는 소유자를 가리킵니다. 기능. 이는 Java 및 C의 this 포인터와는 완전히 다른 두 가지 개념입니다. 많은 사람들이 이를 무시합니다. 이것이 JavaScript에서 이 포인터를 잘 이해할 수 없는 이유 중 하나입니다. 다음 예를 살펴보세요.


var oa = {
x:1,
y:2
}
var ob = {
x:11,
y:12
}
함수 a (w){
alert(w "=" this.x "," this.y)
}
a("?")
oa.fun
oa; .fun("a" );
ob.fun = a;
ob.fun("b")


---------
초기 호출 a( ) 이때 소유자는 지정되지 않습니다. 일반적으로 이는 브라우저의 최상위 요소 창을 가리키며 창에는 x 및 y 속성이 정의되어 있지 않습니다.
따라서 결과는 다음과 같이 표시됩니다. ?=undefine,undefine
oa.fun = a; oa.fun("a"); 객체 a의 fun 속성에 함수 참조를 할당한 다음 모든 함수가 a가 되면 결과는 다음과 같이 표시됩니다: a=1,2
마찬가지로 ob.fun("b")도 다음과 같이 표시됩니다: b=11,12.
JavaScript에서 함수의 소유자(this)를 변경하는 방법은 객체의 속성에 함수 참조를 할당하는 것입니다.
Function 객체는 이 함수를 구현하기 위해 두 가지 프로토타입 함수(apply, call)도 제공합니다. 이 두 함수의 첫 번째 매개변수는 지정될 소유자 객체입니다. 전달될 후속 형식 매개변수를 캡슐화합니다. 함수를 배열로 변환하거나 인수 객체를 직접 사용하세요. 그리고 호출은 형식 매개변수를 직접 따릅니다.
따라서 위의 oa.fun=a; oa.fun("a")는 a.apply(oa, ["a"]) 또는 a.call(oa, "a")로 다시 작성할 수 있습니다. > ob.fun=b; ob.fun("b")는 a.apply(ob, ["b"]) 또는 b.call(ob, "b")로 다시 작성할 수 있습니다.
위 내용을 알고 나면 , 이것의 범위와 용도를 이해하기 쉽습니다.

참고 문서는 다음과 같습니다
Javascript 사용 요약

http://www.jb51.net/article/16863.htm

JavaScript에 대한 심층적인 이해http://www.jb51.net/article/19425.htm


객체 지향에 대한 자세한 설명은 JAVASCRIPT

http://www.jb51.net/article/17584.htm


이 포인터를 자바스크립트로 사용하세요

http://www.jb51.net/article/19434.htm


자바스크립트에서 이 키워드를 사용하는 방법에 대한 자세한 설명

http://www.jb51.net/article/7954.htm


Javascript 키워드 사용 분석

http://www.jb51.net/article/16235.htm


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