在IIFE中使用apply()

时间:2016-03-01 05:46:38

标签: 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']);  

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

1 个答案:

答案 0 :(得分:8)

问题在于;,在您的代码中,Person对象语法未终止,而IIFE被视为其延续。

阅读:Automatic semicolon insertion

如果查看外部库,它们的IIFE语句以;开头,用于摆脱这种情况。

另请注意,在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']);