码迷,mamicode.com
首页 > Web开发 > 详细

JS中的this

时间:2019-12-11 00:03:58      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:class   font   ima   http   ==   str   image   nbsp   win   

㈠This是什么?

解析器(浏览器在调用函数时,每次都会向函数内部传递进一个隐含的参数

    这个隐含的参数就是this,this指向的是一个对象

    这个对象我们称为函数执行的  上下文对象

 

⑵根据函数的调用方式的不同,this会指向不同的对象

       1.以函数的形式调用时,this永远都是window

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

 

⑶具体示例1:打印this

function fun(){

     console.log(this);

}

 fun();

//创建一个对象

var obj = {

       name:"孙悟空",

       sayName:fun

};

var obj2 = {

       name:"沙和尚",

       sayName:fun

};

//console.log(obj.sayName == fun);

①obj.sayName();


②obj2.sayName();

效果如下:

以obj调用,结果:技术图片

 

以obj2调用,结果:技术图片

 

 

⑷具体示例2:打印this.name

function fun(){

     console.log(this.name);

}

 fun();

//创建一个对象

var obj = {

       name:"孙悟空",

       sayName:fun

};

var obj2 = {

       name:"沙和尚",

       sayName:fun

};

//console.log(obj.sayName == fun);

①obj.sayName();

②obj2.sayName();

以obj调用,结果:技术图片

以obj2调用,结果: 技术图片

 

 结论:this不是固定不变的,调用方式不同,对象就不同

 

⑸结合上面例子具体分析:

var name = "全局的name属性";

//obj.sayName();

//以函数形式调用,this是window

fun();

结果:技术图片

 

//以方法的形式调用,this是调用方法的对象

obj.sayName();

结果:技术图片

obj2.sayName();

结果:技术图片

 

㈡This实例

this根据调用者的不同,变成不同的值,让我们的程序变得更加的灵活

//创建一个name变量

var name = "全局";

//创建一个fun()函数

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

//创建两个对象

var obj = {

       name:"孙悟空",

       sayName:fun

};

var obj2 = {

       name:"沙和尚",

       sayName:fun

};

//我们希望调用obj.sayName()时可以输出obj的名字

 

obj.sayName();

结果:技术图片

obj2.sayName(); 

结果: 技术图片

 

㈢This的三种情况

1.当以函数的形式调用时,this是window

2.当以方法的形式调用时,谁调用方法this就是谁

3.当以构造函数的形式调用时,this就是新创建的那个对象

 

JS中的this

标签:class   font   ima   http   ==   str   image   nbsp   win   

原文地址:https://www.cnblogs.com/shihaiying/p/12019763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!