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])

 

原文地址:https://www.cnblogs.com/ashen1999/p/12713212.html