玩转js之11-this关键字(重点)

本文详细介绍了JavaScript中的this关键字,包括它的含义、函数的三种写法、this的分类及其在不同情况下的指向。通过剖析面试题,进一步阐述了如何确定this的值,并探讨了在实际项目中使用this进行对象成员操作的重要性。
摘要由CSDN通过智能技术生成

一、this关键字是什么?

this代表的是 执行这个this代码的环境对象

二、函数的写法分类

1.声明式函数

声明函数:直接在作用域写一个函数

	function fn(){
			
		}

2.定义式函数

定义一个函数:直接创建一个函数 把它当做数据一样

var obj={
			say:function(){}
		}
		var a=function(){}
		var arr=[function fn(){},200,300]
		arr[0]();
		
		(function(){})()
		

2.自调用式函数

函数可以不写函数名

  var a=function(){}
		  a()
		  var arr=[function(){}]
		  arr[0]
		  function fn(){			  
		  }
		   (200)+90;
		   ([100,230,40]).push(100);
		   
		//    匿名函数
		  (function(){
			  console.log(123)
			  console.log(this)
		  })();
  • fn()() window 小括号 它是一种运算符 指向结果
	  function fn(){
			  return function fm(){
				  console.log(this)
			  }
		  }
		 var obj={}
		 obj.fm=fn()
		 obj.fm()
		 fn()() //window
		 

三、this的分类

  • this在脚本中代表的是window全局对象
console.log(this)  //window
  • this在全局函数中代表的是window全局对象
function fn6666(){
			console.log(this,1111111111) //window
		}
			window.fn6666() //window
  • var a=20 全局变量会在脚本执行时,把变量名设置为全局对象window的属性
    function fn(){console.log(this)}全局函数会在脚本执行时,把函数设置为全局对象window的方法
  • this代表的是 执行这个this代码的 环境对象
var a=this;
		console.log(a);
		
		function  fn () {
			console.log(this)
		}
		fn()// window.fn()  对象调方法
		
	var obj={
			name:"karen",
			fn:function(){
				console.log(this)  //obj
			}
		}  		 
	    obj.fn() 
 var obj2={fn:function(){
 console.log(this,1111) //arr   obj2
 }}
		  var arr=[]
		  arr[0]=100
		  arr[1]=obj2.fn
		  
		  console.log(arr[1])//打印fn函数
		  arr[1]()
		  obj2["fn"]()
  • this关键字代表了函数调用时的调用者
  function  fn () {
		  	console.log(this)
		  }
		  fn()//这个代码不是fn在调用 fn代表的是一个函数   隐式的window才是调用者
		  
		  obj.say()//obj
		  
		  arr[1]()//arr 
		  
		sindata.statuses[1].user.say()//sindata.statuses[1].user
  var obj={
			  name:"芭比",
			  son:{
				  name:"儿子",
				  say:function(){
					  console.log(this) //obj.son
				  }
			  }
		  }
		  obj.son.say() 
		  
		  var a=obj.son.say
		  a() //window
		  var arr=[a]
		  arr[0]()  //arr

四、this面试题

题1:

	var obj={
				name:"karen",
				say:function(){
					console.log(this)
					function fn(a){
						console.log(a,this)
					}
					fn(this)
				}
			} 
			 obj.say()

答案:
在这里插入图片描述
分析:在js程序中无论多么复杂的程序 this只需要看离最近(嵌套)的function的这个单词的调用者

题2:

var name = 'lili';
			var obj = {
				name: 'liming',
				prop: {
					    name: 'ivan',
					    getname: function() {
						return this.name;
					    }
				      }
			};
			console.log(obj.prop.getname());//ivan
			var test = obj.prop.getname;
			console.log(test());

答案:
在这里插入图片描述
分析:obj.prop.getname(),返回值是this.name,this是obj.prop,也就是obj.prop.name,对应的是ivan;将obj.prop.getname对应的属性值赋值(是个函数)给test,调用test函数返回this.name,此时的this是window,所以test函数调用后的返回值是window.name,也就是lili

题3;


			function Foo() {
			  getName = function () {console.log (1);}; 
			  return this;
			 }
			 var getName = function () {console.log (4);};
			 Foo().getName ();

答案:1
解析:


/*
			   function Foo() {
			     getName = function () {console.log (1);}; 
			     return this;
			    }
				var  getName = function () {console.log (1);}; //function () {console.log (4);};
				
				 Foo()===>window
				  Foo().getName ()==>window.getName ()==>getName ()
			  
	*/

题4:

function a(xx) {
				this.x = xx;
				return this;
			};
			var x = a(5);
			var y = a(6);
			console.log(x.x);
			console.log(y.x);

答案:在这里插入图片描述
解析:
在这里插入图片描述
题5:

var a = {n: 1};
			var b = a;
			a.x = a = {n: 2};
			console.log (a.x);
			console.log (b.x)

答案:
在这里插入图片描述
解析:a是最后赋值(引用)的 但是a的引用声明是一开始就有了
在这里插入图片描述
图示解析

五、为何要打印this?

this代表了一个对象,常常在项目中我们要给一个对象操作成员

 // this代表了一个对象  常常在项目中我们要给一个对象操作成员
		  
          {
			  name:"karen",
			  chaneg:function(a){
				  obj.name=a
			  }
		  }
		  
		  this.xxx=100

总结

this总结:
fn()// window
obj.fn() //obj
obj.xx.xx2()//obj.xx
(function(){})() window
fn()() window
fn()1 fn()返回的数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值