一道题
var length=10;
function fn(){
console.log(this.length);
}
var obj = {
length:5,
method: function (fn) {
fn();
arguments[0]();
}
};
obj.method(fn);
obj.method(fn, 123);
解答:
函数有如下的集中调用方式
- 普通的函数调用
methods()
- 作为对象的属性进行调用
obj.methods()
- 使用call,apply进行调用
metthod.call(obj)
作为普通函数调用时this的指向
function func(){
console.log(this)
}
func()
function func(){
console.log(this)
}
func.call(undefined)
规则:函数传入的参数是null或者是undefined,那么this的默认指向就是全局对象window。
所以上面的打印结果是window
作为对象的方法调用
var obj={
foo:function(){
console.log(this)
}
}
obj.foo()
可以转换为
obj.foo.call(obj)
此时this指向obj。
[]语法
function fn(){
console.log(this)
}
var arr=[fn,fn2]
arr[0]()
转换为
arr[0].call(arr)