<!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>
this指向
最新推荐文章于 2024-05-29 19:36:44 发布