浓缩解读前端系列书籍一周一章前端书首页投稿(暂停使用,暂停投稿)

一周一章前端书·第6周:《你不知道的JavaScript(上)》

2017-11-04  本文已影响8人  梁同学de自言自语

第二部分 - 第1章:关于this

1.1 为什么要用this

var Me = {
    name : 'William'
}

var You = {
    name : 'Yoki'
}

//公共方法:返回指定对象的大写name
function identify(context){
    return context.name.toUpperCase(); 
}

//公共方法:用指定对象大写的name,输出hello字符串
function speak(context){
    var greeting = "Hello,I'm " + identify(context);
    console.log(greeting);
}

console.log(identify(You));
console.log(identify(Me));
speak(Me);
speak(You);
            
function identify(){
    return this.name.toUpperCase(); 
}

function speak(){
    var greeting = "Hello,I'm " + identify.call(this);
    console.log(greeting);
}

console.log(identify.call(You));
console.log(identify.call(Me));
speak(Me);
speak(You);

1.2 this的误解

function foo(num){
   console.log("foo:" + num);
   this.count++;
}

foo.count = 0;

for(var i=0;i<10;i++){
    if(i > 5){
        foo(i);
    }
}

console.log(foo.count);
console.log(count);

控制台输出的是:

foo:6
foo:7
foo:8
foo:9
0
NaN
for(var i=0;i<10;i++){
    if(i > 5){
        //call()方法就是指明哪个对象来调用方法
        //之前没使用call()方法时,默认是以window来调用方法,以致于window下会多个count=NaN的变量
        foo.call(foo,i);
    }
}

console.log(foo.count);
function foo(){
    var a = 2;
    bar();
}

function bar(){
    console.log('a:' + this.a);
}

foo();

1.3 this到底是什么

上一篇下一篇

猜你喜欢

热点阅读