js中函数调用的四种方式
每种方式的不同在于this的指向
作为函数直接调用
funtion func(a, b){ console.log(a + b); } func(1, 2)
以上的函数是属于全局对象的函数,在html中此函数是属于html全局对象的,在window中此函数是属于window全局对象的。
因此,在浏览器中,window.func() === func()
以上的函数中this指向全局对象
函数作为方法使用
funtion myObj = { name: 'ashen', age: 21, sayHi : function(){console.log('hi~')} } myObj.sayHi();
函数sayHi是属于myObj对象的,此时函数内部this指向myObj对象
函数作为构造函数使用
funtion Dog(name, age){ this.name = name; this.age = age; } var dog = new Dog('didi', 2);
构造函数定义时,是没有任何值的。当通过它创建实例对象时,this指向实例对象
使用call和apply调用
call和apply都是调用一个函数,并传入一个参数来改变函数内部this指向的方法。
function myFunction(a, b) { return a * b; } myFunction.call(myObj, 1, 2) myFuntion.apply(myObj, [1, 2])