我正在尝试在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']);
答案 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']);