1. 이것은 생성자 인스턴스화 객체를 가리 킵니다
이전 기사에서, 우리는 다음 예에서 볼 수 있듯이 새로운 사용과 생성자를 호출하지 않는 것의 차이점을 언급했습니다.
코드 사본은 다음과 같습니다.
기능 Benjamin (사용자 이름, 섹스) {
this.username = username;
this.sex = 섹스;
}
var benjamin = New Benjamin ( "zuojj", "male");
// 출력 : Benjamin {섹스 : "male", username : "zuojj"}}
Console.log (Benjamin);
var ben = Benjamin ( "Zhangsan", "Female");
// 출력 : 정의되지 않았습니다
Console.log (Ben);
생성자를 일반 함수라고 할 때 값이 반환되지 않으며 이는 전역 객체를 가리 킵니다. 그렇다면 새로운 키워드가 부족하여 발생하는 문제를 어떻게 피할 수 있습니까?
코드 사본은 다음과 같습니다.
기능 Benjamin (사용자 이름, 섹스) {
// "this"가 "벤자민"대상인지 확인하십시오
if (벤자민 의이 사례) {
this.username = username;
this.sex = 섹스;
}또 다른 {
새로운 Benjamin (사용자 이름, 섹스)을 반환합니다.
}
}
var benjamin = New Benjamin ( "zuojj", "male");
// 출력 : Benjamin {섹스 : "male", username : "zuojj"}}
Console.log (Benjamin);
var ben = Benjamin ( "Zhangsan", "Female");
// 출력 : Benjamin {username : "zhangsan", 섹스 : "여성"}}
Console.log (Ben);
위의 예에서는 먼저 이것이 벤자민의 인스턴스인지 확인하는데, 그렇지 않은 경우, 새로운 것을 사용하여 생성자를 자동으로 호출하여 인스턴스화하는 데 더 이상 새로운 키워드 인스턴스화 생성자가 누락 된 것에 대해 걱정할 필요가 없습니다. 물론, 우리는 이런 식으로 나쁜 습관을 발전시킬 수 있습니다. 이 현상을 피하면 어떻게됩니까? 우리는 다음과 같은 오류를 던질 수 있습니다.
코드 사본은 다음과 같습니다.
기능 Benjamin (사용자 이름, 섹스) {
// "this"가 "벤자민"대상인지 확인하십시오
if (벤자민 의이 사례) {
this.username = username;
this.sex = 섹스;
}또 다른 {
// 그렇지 않으면 오류를 던지십시오.
새로운 오류를 던지십시오 ( "``벤자민 ''은`new '"없이 호출);
}
}
2. 이것은 함수를 호출하는 객체를 가리 킵니다.
다음 예를 참조하십시오.
코드 사본은 다음과 같습니다.
var x = 10;
var obj = {
x : 10,
출력 : function () {
// 출력 : true
console.log (this === obj);
이 this.x;
},
Innerrobj : {
x : 30,
출력 : function () {
// 출력 : true
console.log (this === obj.innerobj);
이 this.x;
}
}
};
// 출력 : 10
console.log (obj.output ());
// 출력 : 30
console.log (obj.innerobj.output ());
3. 이것은 글로벌 대상을 가리 킵니다
위의 생성자를 논의 할 때, 우리는 또한 새로운 것이 적용되지 않을 때 글로벌 객체를 가리킬 것이라고 논의했습니다. 오류가 발생하기 쉬운 두 가지 일반적인 예를 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
var x = 100;
var obj = {
x : 10,
출력 : function () {
(기능() {
// 출력 : true
console.log (this === 창);
// 출력 : 내부 : 100
Console.log ( "내부 :" + this.x);
}) ();
이 this.x;
}
};
// 출력 : 10
console.log (obj.output ());
클로저를 사용하면 범위가 변경되고 이는 브라우저에서 창을 가리 킵니다.
코드 사본은 다음과 같습니다.
var x = 100;
var obj = {
x : 10,
출력 : function () {
이 this.x;
}
};
var output = obj.output;
// 출력 : 10
console.log (obj.output ());
// 출력 : 100
console.log (output ());
var obj2 = {
x : 30,
출력 : obj.output
}
// 출력 : 30
console.log (obj2.output ());
현재 이것은 기능 호출시 객체를 가리 킵니다.
4. 이것은 apply/call () 메소드에 의해 지정된 개체를 가리 킵니다.
코드 사본은 다음과 같습니다.
var x = 100;
var obj = {
x : 10,
출력 : function () {
이 this.x;
}
};
// 출력 : 10
console.log (obj.output ());
var obj2 = {
x : 40,
출력 : obj.output
}
// 출력 : 40
console.log (obj.output.call (obj2));
// 출력 : 10
console.log (obj2.output.apply (obj));
5.이 콜백 함수 의이 기능은 콜백을 호출하는이 함수에 의해 가리키는 객체를 가리 킵니다.
코드 사본은 다음과 같습니다.
// <입력 유형 = "text"value = "3"id = "txt_username">
$ ( "#username"). on ( "click", function () {
Console.log (this.value);
});
6. 이것은 function.prototype.bind입니다
bind () 메소드는 호출 될 때이 키워드가 제공된 값으로 설정된 새로운 함수를 생성하며, 새 함수가 호출 될 때 제공된 주어진 인수 시퀀스가 있습니다.
Example 1:
코드 사본은 다음과 같습니다.
기능인 () {
이 this.name;
}
//function.prototype.bind
var per = person.bind ({
이름 : "Zuojj"
});
Console.log (per);
var obj = {
이름 : "벤",
사람 : 사람,
per : per
};
// 출력 : Ben, Zuojj
console.log (obj.person (), obj.per ());
Example 2:
코드 사본은 다음과 같습니다.
this.x = 9;
var module = {
X : 81,
getx : function () {return this.x; }
};
// 출력 : 81
console.log (module.getx ());
var getx = module.getx;
// outputs : 9,이 경우 "이것은"는 글로벌 객체를 나타냅니다.
Console.log (getx);
// 'this'bound to module으로 새 기능을 만듭니다.
var boundgetx = getx.bind (모듈);
// 출력 : 81
console.log (boundgetx ());