Js中this是在运行的时候进行绑定的,这是Js中this关键字具备多重含义的本质原因。所以,Js中的this可以是全局对象、当前对象或者是任意对象。这完全取决于函数的调用方式,而js中函数的调用有以下几种方式:
- 作为对象方法调用
- 作为函数调用
- 作为构造函数调用
- 使用apply或call调用
根据以下判断,判别this分别指向什么:
1.函数调用是用new进行调用的吗?如果是,则this指向新创建的对象,否则进行下一步判断
2.判断该函数是否是用dot(.)进行调用的,如果是的话,那么this指向dot(.)之前的对象;否则this指向全局对象window.
四种调用方式中this的指向
函数调用模式中this指全局对象(window)
var f1 = function() {
alert("这个是函数调用");
alert(this);//window
};
f1();
方法调用
由对象调用方法(当对象为null的时候,函数进行函数调用模式,当对象不为null的时候,函数实现方法调用模式)
在方法调用模式中 this 表示当前对象
var o = {name:"小明"};
o.say = function() {
alert(this.name);//小明
alert(this);//o
};
o.say();
任何一个函数放在new 后面就是构造函数,构造函数的this是构造函数返回的对象,构造函数的return发生变化,如果返回的是对象,直接返回,否则返回创建出来的对象
如
var Person = function(n) {
this.name = n;
return {
name:"男",
get:function(){
console.log(this.name);
};
// return 123;
}
var p = new Person();
函数的apply调用模式和call调用模式
语法:
函数名.apply(对象, [参数数组]);
函数名.call(对象, 参数列表);
如
var func = function() {
this.name = "小明";
this.say = function(){alert(this.name + "学习好");};
};
func.apply(null); // 等价于 func();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。