JS的this练习

this基本上就代表的是对象  在及其少的时候 this不是对象=>call  apply bind

1、

<script>

			function fn(){
				this.x=100 //等价于window.x=100
			}
			fn() //等价于window.fn(),全局函数看作为window的方法
			console.log(x)//等价于console.log(window.x=100) 打印100

//易错点:容易把x看作函数内的变量,x的作用域在函数内,外部调用时无法获取,所以以为报错
</script>

2、

<script>

			var obj={
				name:"jack",
				age:10,
				setAge:function(age){ //函数的嵌套
					this.age=age
					
				}
			}
			obj.setAge(30) //obj为调用者,调用setAge方法,this.age=age等价于obj.age=age
                            //obj对象已经有age属性,所以修改age的值,变化后age=30
			console.log(obj)//{name:"jack",age:30,setAge:function(age){this.age=age}}
			var fn=obj.setAge //定义一个fn变量,fn引用setAge函数对象
			fn(40)//此时的调用者为隐式的window,this.age=age等价于window.age=age
                    //window对象中无age,所以先创建age属性,再赋值为40
			console.log(age) //40
</script>

3、

<script>
    function fn(){}
			function fm () {
				this.fm=100
				//等价于fn.fm=100
			}
			fn.fn=fm	//为fn函数对象创建一个fn属性,引用fm函数对象		
			fn.fn()//让fm函数运行 而且调用者是fn函数(对象)  运行的函数内部的this是fn函数			
			console.log(fn.fn,fn.fm)//	function fm () {this.fm=100},100
			console.log(window.fm)//全局函数看成window对象的方法,
                                    //打印为function fm () {this.fm=100}
</script>

4、

<script>
	var obj = {
				name: "karen",
				fn: function() {
					console.log(this.name) //window默认有name属性,但值为空,打印为空字符串
				}
			}
			var a = obj.fn //定义一个变量a,引用obj对象中函数对象
			a()//调用函数,调用者为隐式的window对象

//----------------------------------------------
   //此题中为this可以不考虑谁调用,而是考虑函数作用域
	var obj = {
				name: "karen",
				fn: function() {
					console.log(name)
                //fn函数中无name属性,它会到它的上一层寻找name属性
//                打印karen
				}
			}
			var a = obj.fn
			a()//调用函数
</script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值