this指向

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <body>
    <input type="button" name="" id="btn" value="" />
    <script type="text/javascript">
      //严格模式下,this指向undefined
      // 		'use strict'
      // 		function foo(){
      // 			console.log(this);//undefined
      // 		}
      // 		foo();

      //普通模式下,谁调用指向谁
      // 		function box(){
      // 			console.log(this);//window
      // 		}
      // 		box()

      // 		var obj={
      // 			name:"obj",
      // 			sayhello:function(){
      // 				console.log(this);//obj
      // 			}
      // 		}
      // 		obj.sayhello();

      var name = "window";
      // 		var obj={
      // 			name:"obj",
      // 			sayhello:function(){
      // 				return function(){
      // 					console.log(this);
      // 				}
      // 			}
      // 		}
      // 		//console.log(obj.sayhello());
      // 		//obj.sayhello()//没有输出,因为返回的函数体没有执行
      // 		var f=obj.sayhello()
      // 		f()//window
      // 		//obj.sayhello()()//window
      //

      // var obj = {
      // 	name: 'obj',
      // 	sayHello: function() {
      // 		console.log(this) //obj
      // 		setTimeout(function(){
      // 			console.log(this)  //window
      // 		})
      // 	}
      // }
      // obj.sayHello()

      //      箭头函数中的this指向:指向定义这个箭头函数时所在环境中的this
      // 		在哪个地方定义,指向那个地方的this

      //		var foo=()=>{
      // 			console.log(this);//window
      // 		}
      // 		foo();

      // var name='window';
      // var obj={
      // 	name:'obj',
      // 	sayhello:()=>{
      // 		console.log(this.name);
      // 	}
      // }
      // obj.sayhello()  //window

      // var name='window';
      // var obj={
      // 	name:'obj',
      // 	sayhello: function() {
      // 		return ()=>{
      // 			console.log(this);
      // 		}
      // 	}
      // }
      // obj.sayhello()()  //obj

      // var name='window';
      // var obj={
      // 	name:'obj',
      // 	sayhello: function() {
      // 		return ()=>{
      // 			console.log(this);
      // 		}
      // 	}
      // }
      // obj.sayhello()()  //obj


    //   var name = "window";
    //   var obj = {
    //     name: "obj",
    //     sayhello: () => {
    //       return () => {
    //         console.log(this);
    //       };
    //     }
    //   };
	//   obj.sayhello()(); //window
	  

	//   var name = "window";
    //   var obj = {
    //     name: "obj",
    //     sayhello: () => {
    //       return function() {
    //         console.log(this);
    //       };
    //     }
    //   };
	//   obj.sayhello()(); //window
	  


	//   var name = "window";
    //   var obj = {
    //     name: "obj",
    //     sayhello: function() {
	// 		setTimeout(() => {
	// 			console.log(this)
	// 		})
    //     }
    //   };
	//   obj.sayhello(); //obj
	

	//call apply bind
		var obj1 = {
			name: 'obj1',
			sayHello: function() {
				console.log(this.name)
			}
		}
		var obj2 = {
			name: 'obj2'
		}
		obj1.sayHello.call(obj2) //obj2  改变call方法的第一个参数
		obj1.sayHello.apply(obj2)
		obj1.sayHello.bind(obj2)()
    </script>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值