JS函数调用方式

(1)作为函数
在ECMAScript3和ECMAScript5中,调用上下文(this)是全局对象。在严格模式中,调用上下文是undefined
(2)作为方法
此时方法的上下文为该函数对象
(3)作为构造函数
构造函数初始化新创建的对象,并将这个对象作为其调用上下文,并用this引用这个新创建的对象。
new o.m()中的this指向的是新创建的对象,而不是m。
构造函数中的return语句没有返回值或者返回一个原始值,则忽略这个返回值,同时使用新对象作为调用结果
var Create = function(book){
  this.book = book;
  //return ;    还是返回新创建的对象
  //return 1;   还是返回新创建的对象
  //return [1]; 此时返回[1]
}
(4)通过它们的apply(),call()间接调用
注:作为嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,this指向调用它的对象,否则this指向window或undfined。
var o = {
  m: function(){
    var self = this;
    console.log(this === o);    //true
    f();

    function f() {
      console.log(this === o);  //false
      console.log(self === o);  //true
   }
};
原文地址:https://www.cnblogs.com/wuzy/p/3094620.html