在JavaScript中的this不是固定不变的,随着他的环境而改变
this的作用:
1、在方法中调用:则this表示该方法所属的对象或全局对象
在外包裹一个指定的对象时,方法中的this指向包裹他的对象,如果有很多层对象包裹,则this指向最深层调用他的第一个对象,
var name = ‘windowdada‘; var obj = { name: ‘objdada‘, objB: { name: ‘objBdada‘, bFun: function(){ console.log(this.name); } } }; var test = obj.objB.bFun(); //输出结果为objBdada ,()左边是bFun引用,它指向objB这个对象,所以打印出objBdada var test2 = obj.objB.bFun; test2(); //输出结果为windowdada, ()的左边为test2,它不是某个对象的引用,所以是全局对象 var test3 = obj.objB; var test4 = test3.bFun; test4(); //同上
var name = ‘windowDada‘; var obj = { name: ‘dada‘, foo: function () { console.log(this.name); } }; var foo = obj.foo; // 写法一 obj.foo()// dada // 写法二 foo() //windowDada
2、单独使用this,this指向全局对象
var x = this; //this指向[object Window]
3、函数中使用this(非严格模式)
根据函数所属默认绑到this上,那么在浏览器中,window就是该全局对象[object window]
则this指的是全局对象[object Window]
函数中使用this(严格模式)
严格模式下this 函数没有绑定到this上,此时的this是undefined
在事件中的this,this指向接收事件的HTML元素,对该元素进行操作
对象中绑定的this,this是属于一个对象,而对象是函数的所有者
call的用法:
call方法用来代替另一个对象调用一个方法,该方法可以将一个函数对象的上下文改变为由this obj指定的新对象。
call方法的参数,
1.如果是不传,或是null,undefined的情况下,函数中的this指向就是指window对象,
2.如果传递的是另一个函数的函数名,函数中的this指向就是这个函数的引用,
3.如果参数传递的是基本类型数据时,函数中的this指向就是其对应的 包装对象了,
4.如果参数传递的是一个对象时,函数中的this就指向这个对象。
var da = { name: "da", sayHello: function (age) { console.log("hello, i am ", this.name + " " + age + " years old"); } }; var jeskson = { name: "jeskson", }; da.sayHello(12); //hello, i am da 12 years old da.sayHello.call(jeskson,13); // hello, i am jeskson 13 years old
显示函数绑定:
call(thisObj,arg1,arg2,arg...)
var person1 = { fullName: function() { return this.firstName + " " + this.lastName; } } var person2 = { firstName:"John", lastName: "Doe", } var x = person1.fullName.call(person2); document.getElementById("demo").innerHTML = x;
apply的用法:
apply(thisObj,argArray) var person={ fullName:function(){ return this.firstName+""+this.lastName; }} var person1={ firstName:"Bill", lastName:"Gates", } person.fullName.apply(person1); //返回"Bill Gates" }
原文:https://www.cnblogs.com/haohuihai/p/13199872.html