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

How to use bind function on an anonymous function

本文关键字:函数 bind      更新时间:2023-09-26

我不知道为什么我的代码不运行,有人能给我一些方向吗?当我运行这段代码并检查控制台时,我得到了错误

" Uncaught TypeError: (intermediate value)(intermediate value)(intermediate value)(intermediate value)不是一个函数"

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

}).bind(person);

问题是您缺少一个分号(;)。如果在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);

您可以加入一个分号和一个带括号的调用,因为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