在IIFE中使用apply()

use*_*100 3 javascript

我正试图在IIFE中使用apply().我得到一个错误'中间值不是一个函数'我哪里错了?

var Person = {
  getFullName : function(firstName, lastName) {
      return firstName + ' ' + lastName;
  }
}

/* IIFE - using apply */

(function(firstName, lastName) {
   getName = function(){
    console.log("From IIFE..");
    console.log(this.getFullName(firstName, lastName));
} 
  getName();
}).apply(Person, ['John', 'Doe']);  
Run Code Online (Sandbox Code Playgroud)

Plnnkr:http://plnkr.co/edit/77db8Mu4i9RXGqt26PAP?p = preview

Aru*_*hny 8

问题在于;,在您的代码中,Person对象语法没有终止,而IIFE被认为是其延续.

阅读:自动分号插入

如果查看外部库,它们的IIFE语句以a开头,;用于逃避此场景.

另请注意,在getName函数内部this不引用Person对象,您需要使用闭包变量或this手动传递值.

var Person = {
  getFullName: function(firstName, lastName) {
    return firstName + ' ' + lastName;
  }
}

/* IIFE - using apply */

;
(function(firstName, lastName) {

  var self = this;
  var getName = function() {
    console.log("From IIFE..");
    console.log(self.getFullName(firstName, lastName));
  }
  getName();
}).apply(Person, ['John', 'Doe']);
Run Code Online (Sandbox Code Playgroud)

  • 或者`getName();`应该是`getName.call(this);`. (2认同)