如何在匿名函数上使用bind函数

时间:2016-09-26 21:14:25

标签: javascript

我不确定为什么我的代码没有运行,有人可以给我一些方向吗? 当我运行此代码并检查控制台时,我收到错误

"未捕获的TypeError :(中间值)(中间值)(中间值)不是函数"

var person = {
  firstName: "Jane",
  lastName: "Doe",
  getFullName: function() {
    var fullName = this.firstName + this.lastName;
    return fullName;
  }
}

(function() {
  console.log(this.getFullName());


}).bind(person);

2 个答案:

答案 0 :(得分:6)

问题是你错过了分号(;)。如果在person声明的末尾没有分号,您的代码就会有效地转换为此。

var person = { firstName: 'Jane', ... }(function() {
  console.log(this.getFullName());
}).bind(person);

从语法上讲,您尝试将对象作为函数调用,然后将该函数的结果用作另一个函数。

以下是您更正后的代码:



var person = {
  firstName: "Jane",
  lastName: "Doe",
  getFullName: function() {
    var fullName = this.firstName + this.lastName;
    return fullName;
  }
};

// Isn't called because `bind` returns a new function
(function() {
  console.log(this.getFullName());
}).bind(person);

// What you probably want to do
(function() {
  console.log(this.getFullName());
}).call(person);




答案 1 :(得分:3)

您可以使用括号输入分号和调用,因为var语句尚未结束且尝试调用对象person

var person = {
        firstName: "Jane",
        lastName: "Doe",
        getFullName: function() {
            var fullName = this.firstName + this.lastName;
            return fullName;
        }
    }; // insert semicolon here  


(function () {
    console.log(this.getFullName());
}).bind(person)(); // add parenthesis