一道题
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)
