javascript学习笔记--this基础

2018-09-29  本文已影响0人  持续5年输出bug

解析器在调用函数时,每次都会向函数内部传递一个隐含的参数,这个参数就是this,根据调用形式的不同,this的指向也是不同的:
1.以函数的形式调用,this永远都是window;
例如:

function fun(){
console.log(this)
}
fun();

//以上打印结果为widow
2.以方法的形式调用,this就是调用方的那个对象。
例如:

    function fun(){
        console.log("holl");
    }
    fun();
    var a=new Object()
        a.name="tom";
        a.sayName=fun;
        a.sayName();

  //console.log( a.sayName==fun)   //打印结果为ture,
  //console.log( a.sayName()==fun())   //打印结果为ture,      
  //表明他们是一样的,但是,this却指向不同
  //  a.sayName();打印出的是holl,对象创建方式也可用 var a = {}形式创建

同时,1也可以这样写,即fun()是window的对象:
function fun(){
console.log(this)
}
window.fun();
而this指向的其实也是一个对象,这个对象我们称为函数执行的上下文对象,所以1,2其实都是以方法形式调用,所以整合起来一句话:

以方法的形式调用,this就是调用方法的那个对象

实际应用:
希望调用 obj1.sayName();的时候 打印tom;obj2.sayName();的时候 打印hrry

var  name="全局";
function fun(){
console.log(name);
}

fun();
var obj={
name:"tom",
sayName:fun
};

var obj2={
name:"hrry",
sayName:fun
};
obj.sayName();

// 执行以上,控制台打印结果为全局,目标未能实现,利用this改造代码

    var  name="全局";
    function fun(){
        console.log(this.name); // 打印结果为“全局”
    }
    fun();
    var obj1={
    name:"tom",
    sayName:fun
    };
    
    var obj2={
    name:"hrry",
    sayName:fun
    };
    obj1.sayName();// 打印结果为tom
    obj2.sayName();// 打印结果为hrry
上一篇 下一篇

猜你喜欢

热点阅读