대상 프로그래밍 세계 첫걸음 (this &call &apply &bind)
1. firstCase
CODE
var obj1 = {
name:"everyone",
hi:function(){
console.log("Hello!" + obj1.name)
}
}
obj1.hi()
obj1.hi.call()
CONSOLE
"Hello!everyone"
"Hello!everyone"
2. secondCase
CODE
var obj2 = {
name:"jack",
hi:function(person){
console.log("hi!" + person.name )
}
}
obj2.hi(obj2)
//obj2.hi.call(obj2),
CONSOLE
"hi!jack"
3. thirdCase
CODE
var obj3 = {
name:"rose",
hi:function(name){
console.log("hi!" +
name)
}
}
obj3.hi(obj3.name)
obj3.hi.call(obj3.name)
CONSOLE
"hi!rose"
"hi!undefined"
COMMENT
4. fourthCase
CODE
var obj4 = {
name:"lucy",
hi:function(object, ){
console.log( + '! ' + object.name )
}
}
obj4.hi(obj4,' ')
obj4.hi.call(obj4,' ')
CONSOLE
" ! lucy"
"undefined! undefined"
COMMENT
5. fifthCase
CODE
var obj5 = {
name:" ",
hi:function( ){
console.log( + this.name)
}
}
obj5.hi(' ?')
obj5.hi.call(obj5,' ?')
obj5.hi.apply(obj5,[' ?'])
CONSOLE
" ? "
" ? "
" ? "
COMMENT
6. sixthCase
CODE
var obj6 = {
hi:function(){
console.log(this)
}
}
var HI = obj6.hi
HI()
obj6.hi()
CONSOLE
Window
obj6
COMMENT
7. seventhCase
CODE
var obj7 = {
hi:function(p1){
console.log(this);
console.log(typeof this);
console.log(typeof 11);
console.log(p1)
}
}
var HI = obj7.hi
HI.call(22,"hello")
CONSOLE
22
"object"
"number"
"hello"
8. eighthCase
CODE
var fn = function(){
console.log(this)
}
var obj8_1 = {
hi:fn
}
var obj8_2 = {
hi:fn
}
fn()
fn(11)
fn.call({name:"lin"})
obj8_1.hi()
obj8_2.hi()
CONSOLE
Window
Window
{name:"lin"}
obj8_1
obj8_2
COMMENT
9. ninthCase
HTML
JavaScript
xxx.onclick = function(e){
console.log(this)
}
CONSOLE
[object HTMLButtonElement]
COMMENT
10. tenthCase
JavaScript
setTimeout(function(){
console.log(this)
},1000)
CONSOLE
Window
11. eleventhCase
JavaScript
var obj11 = {
hi:function(){
console.log(this)
}
}
setTimeout(obj11.hi,1000)
setTimeout(obj11.hi.bind(obj11),1000)
CONSOLE
Window
obj11
COMMENT
12. twelfthCase
JavaScript
function fn(){
console.log(this)
}
fn.bind({name:"qing"}).call({name:"li"})
CONSOLE
{name:"qing"}
13. thirteenthCase
JavaScript
function fn(){
console.log(this)
}
fn.bind({name:"qing"}).call({name:"li"})
CONSOLE
{name:"qing"}
14. fourteenthCase
JavaScritpt
var a = [1,2,3]
var b ={0:4,1:5,2:6,length:3}
console.log(a.slice.call(b,0,2))
CONSOLE
[4, 5]
15. fifteenthCase
HTML
JavaScript
var name = 'wang'
var obj14 = {
name:'lin',
listen:function(){
console.log("obj14:"+this);
console.log('name:'+this.name)
xxx.onclick = function(){
console.log("onclick.this:" + this)
}
}
}
obj14.listen()
CONSOLE
"obj14:[object Object]"
"name:lin"
"onclick.this:[object HTMLButtonElement]"
COMMENT
ES6 새 구문의 this 추가
화살표 함수는 setTimeout 안에 있는this를 정의할 때 있는 역할 영역으로 묶을 수 있습니다. 실행할 때 있는 역할 영역을 가리키는 것이 아니라 정의할 때 있는 역할 영역으로 묶을 수 있습니다.
function Timer() {
this.s1 = 0;
this.s2 = 0;
//
setInterval(() => this.s1++, 1000);
//
setInterval(function () {
this.s2++;
}, 1000);
}
var timer = new Timer();
setTimeout(() => console.log('s1: ', timer.s1), 3100);
setTimeout(() => console.log('s2: ', timer.s2), 3100);
// s1: 3
// s2: 0
첫 번째this는 구조 함수 Timer의 실례를 가리키고 두 번째this는 윈도우를 가리킨다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.