函数在js中具有四种身份,分别为函数、方法、构造函数、apply或call调用
函数调用
函数调用模式中this指全局对象(window)
var f1 = function() {
alert("这个是函数调用");
alert(this);
};
f1();
方法调用
在方法调用模式中 this 表示当前对象
var o = {name:"赵建宇"};
o.say = function() {
alert("这个是方法调用模式");
alert(this.name);
alert(this);
};
o.say();
o.say = f1;
o.say();
在闭包中有时会需要临时使用一个函数执行一个比较复杂的操作
var o = {
name : "赵建宇"
, say : function() {
// 方法 this就是o
var that = this;
(function() {
// 处理一些较为复杂的操作,又要使用到这个对象
alert("这个是" + that);
})();
}
}
o.say();
构造函数
任何一个函数放在new 后面就是构造函数,构造函数的this是构造函数返回的对象,构造函数的return发生变化,如果返回的是对象,直接返回,否则返回创建出来的对象
如
var Person = function(n) {
this.name = n;
return {sex:"男"};
// return 123;
}
var p = new Person();
函数的apply调用模式和call调用模式
语法:
函数名.apply(对象, [参数数组]);
函数名.call(对象, 参数列表);
作用:
当对象为null的时候,函数进行函数调用模式,
当对象不为null的时候,函数实现方法调用模式
var func = function() {
this.name = "马伦";
this.say = function(){alert(this.name + "牛逼");};
};
func.apply(null);
// 等价于 func();
var o = {};
try {
o.say();
} catch(e) {
alert(e);
}
func.apply(o);
// 等价于 new func();