위의 개념을 참조하기 전에 먼저 JavaScript의 함수에서 기능의 숨겨진 매개 변수에 대해 이야기하고 싶습니다 : 인수
논쟁
이 객체는 실행 된 함수의 매개 변수를 나타내고 함수를 호출합니다.
[기능.] 논증 [n]
매개 변수 기능 : 옵션. 함수 객체의 이름이 현재 실행됩니다. N : 옵션. 매개 변수 값 인덱스를 0에서 함수 객체로 전달합니다.
설명
인수는 함수가 호출 될 때 지정된 매개 변수 외에 생성 된 숨겨진 객체입니다. 인수는 배열과 비슷한 객체이지만 배열과 같은 액세스 특성과 메소드가 있기 때문에 배열이 있습니다. 배열 길이 속성 길이가 있습니다. 또한 인수 객체가 기능 문에 의해 정의 된 매개 변수 목록에 국한되지 않고 실제로 기능에 전달되는 함수를 저장하는 매개 변수도 있습니다. 인수 객체는 함수의 시작 부분에서만 사용할 수 있습니다. 다음 예는 이러한 속성을 자세히 설명합니다.
다음과 같이 코드 코드를 복사하십시오.
// 객체 객체의 사용.
함수 argtest (a, b) {{
var i, s = "예상되는 Argtest 함수";
var numargs = arguments.length;
var Expargs = argtest.length; // 예상 매개 변수의 값을 얻습니다.
if (Expargs <2)
s + = Expargs + "인수.";
또 다른
s + = Expargs + "인수.";;
if (numargs <2)
s + = numargs + "가 통과되었습니다.";
또 다른
s + = numargs + "우리는 통과했습니다.";
s += "/n/n"
for (i = 0; i <numargs; i ++) {// 매개 변수 내용을 가져옵니다.
s + = "arg" + i + "=" + 인수 [i] + "/n";
}
return (s); // 매개 변수 목록을 반환합니다.
}
다음은 인수가 배열 (배열 클래스)이 아니라는 것을 설명하는 코드입니다.
다음과 같이 코드 코드를 복사하십시오.
Array.prototype.setValue = 1;
alert (new array (). selfvalue);
함수 테스트 () {
경고 (arguments.selfvalue);
}
첫 번째 경고 표시 1을 찾을 수 있습니다. 즉, 배열 객체의 값이 1 인 self 값 속성이 있음을 의미합니다. 함수 Desagumens를 호출 할 때 "정의되지 않은"이 인수의 속성이 아니라는 것을 알 수 있습니다. 인수의 속성, 즉 인수는 배열 객체가 아닙니다.
방문객
현재 함수를 호출하는 함수에 대한 참조를 반환합니다.
functionName.Caller
functionName 객체는 실행 함수의 이름입니다.
설명
함수의 경우 발신자 속성은 함수가 실행될 때만 정의됩니다. 함수가 상단 레이어에서 호출되면 발신자는 NULL을 포함합니다. 발신자 속성이 문자열의 컨텍스트에서 사용되면 결과는 functionName.tString과 동일합니다. 즉, 함수의 컴파일 텍스트가 표시됩니다.
다음 예제는 발신자 속성의 사용을 보여줍니다.
다음과 같이 코드 코드를 복사하십시오.
// 발신자 데모 {
함수 calldemo () {
if (callerdemo.caller) {
var a = callerdemo.caller.toString ();
경고 (a);
} 또 다른 {
Alert ( "이것은 최고 함수입니다");
}
}
함수 handleCaller () {
Callerdemo ();
}
칼리
실행중인 함수 객체의 텍스트, 지정된 함수 객체의 텍스트를 반환합니다.
[기능.] arguments.callee
선택적 함수 매개 변수는 현재 실행중인 함수 객체의 이름입니다.
설명
Callee 속성의 초기 값은 실행되는 기능 객체입니다.
Callee 속성은 인수 객체의 구성원이며, 이는 기능 객체 자체에 대한 참조를 나타내며, 이는 익명 함수의 재귀 또는 함수 포장에 도움이됩니다. 이 속성은 상관 함수가 실행될 때만 사용할 수 있습니다. Callee는 길이 속성을 가지고 있습니다. arguments.length는 단단한 매개 변수 길이이며 arguments.callee.length는 매개 변수의 길이이며 매개 변수의 길이가 실제 매개 변수 길이와 일치하는지 여부를 결정할 수 있습니다.
모범적 인 예
다음과 같이 코드 코드를 복사하십시오.
// Callee는 스스로 인쇄 할 수 있습니다
함수 호출
경고 (Arguments.callee);
}
// 매개 변수를 확인하는 데 사용됩니다
함수 calleelelengthdemo (arg1, arg2) {{
if (arguments.length == arguments.callee.length) {
window.Alert ( "인삼과 솔리드 매개 변수 길이를 확인하는 것이 정확합니다!");
반품;
} 또 다른 {
ALERT ( "솔리드 파라미터 길이 :" +arguments.length);
ALERT ( ""Shape Permiated : +arguments.callee.length);
}
}
// 재귀 계산
var sum = function (n) {
if (n <= 0)
반환 0;
또 다른
n + arguments.callee (n -1) 반환
}
보다 일반적인 재귀 기능 :
다음과 같이 코드 코드를 복사하십시오.
var sum = function (n) {
if (n <= 0)
반환 0;
또 다른
반환 n + 합 (n-1);
}
호출시 : Alert (sum (100));
그중에는 SUM 자체에 대한 참조가 포함되어 있습니다.
적용하고 전화하십시오
그들의 역할은 기능을 다른 객체에 바인딩하는 것입니다.
적용 (Thisarg, Argarray);
콜 (thisarg [, arg1, arg2 ...]);
즉, 함수 내부 의이 포인터는이 Arg에 할당되어 기능을 다른 객체로 실행하는 목적을 달성 할 수 있습니다.
적용의 설명
Argarray가 효과적인 배열이 아니거나 인수 대상이 아닌 경우, Typerror가 발생합니다.
Argarray와 Thisarg의 매개 변수가 없으면 글로벌 객체는 thisarg로 사용됩니다.
매개 변수에 전달할 수 없습니다.
전화의 설명
호출 메소드는 기능 객체의 컨텍스트를 초기 컨텍스트에서 thisarg가 지정한 새 개체로 변경할 수 있습니다.
이 ARG 매개 변수를 제공하지 않으면 글로벌 객체가 thisarg로 사용됩니다.
관련 기술 :
통화 및 적용을 적용하는 데있어서, 즉 다른 함수 (클래스)를 호출 및 적용으로 사용한 후 현재 함수 (클래스)는 다른 방법 (클래스) 메소드를 가지고 있습니다 "계승". 다음 예를보십시오.
다음과 같이 코드 코드를 복사하십시오.
// 상속 된 데모
함수 base () {
this.member = "dnnnsun_member";
this.method = function () {
window.alert (this.member);
}
}
function expedition () {) {
base.call (this);
window.alert (멤버);
window.alert (this.method);
}
위의 예는 호출 후 확장이 기본의 방법과 속성을 상속받을 수 있음을 알 수 있습니다.
그건 그렇고, 적용을 사용하여 JavaScript 프레임 워크 Propro에서 정의 된 모델을 작성하십시오.
실제로 현재 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사하십시오.
var class = {
작성 : function () {
return function () {
this.initialize.apply (this, arguments);
}
}
}
분석 : 코드에서 객체에는 하나의 메소드 만 포함됩니다. 그러나 이것은 또한 초기화가 호출되는 클래스의 생성자이며,이 방법은 클래스 생성 중에 정의 된 초기화 함수입니다. 이러한 방식을 통해 프로토 타입에서 클래스 제작 모드를 구현할 수 있습니다.
예:
다음과 같이 코드 코드를 복사하십시오.
var Vehicle = class.create ();
Vehicle.prototype = {
초기화 : 함수 (유형) {
this.type = 유형;
}
showself : function () {{)
경고 ( "이것은"+ this.type);
}
}
var moto = New Vene ( "Moto");
moto.showself ();