【问题标题】:Function defined inside of an object doesn't return the value? [duplicate]对象内部定义的函数不返回值? [复制]
【发布时间】:2017-12-18 23:10:01
【问题描述】:

我正在尝试返回对象内部元素的名称。第二个元素是函数getBook(),它应该返回书名,但我在控制台中得到undefined。我已经定义了引用对象内部函数的第二个变量 get name。我不确定是否可以使用 return this.element。如果有人能解释我的代码失败的原因,我将不胜感激。谢谢你。

var books = { 
    name: 'Goodnight Moon', 
    getBook() { 
        return this.name; 
    } 
}; 

var getName = books.getBook; 
console.log(getName());

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    您需要将bind()books 的getName 函数表达式。否则this 的上下文将引用window 对象:

    var books = {
      name: 'Goodnight Moon',
      getBook() {
        return this.name;
      }
    };
    
    var getName = books.getBook.bind(books);
    console.log(getName());

    【讨论】:

    • 卡尔,感谢您花时间回复。请您解释一下为什么我们必须使用 bind 以及为什么我的原始代码返回 undefined?
    • 我更新了我的答案。如果需要进一步解释,请告诉我。
    • @espresso_coffee:将this 视为另一个函数参数。它由调用者设置为某个值,具体取决于调用函数的方式。你也可以在像getName.call(books)这样调用的时候手动设置,或者如上图,你可以使用.bind()创建一个新函数,它的值永久绑定为this的值。
    【解决方案2】:

    当然你可以这样做

    // same object definition
    var books = { 
        name: 'Goodnight Moon', 
        getBook() { 
            return this.name; 
        } 
    };
    
    // but call:
    books.getBook();
    console.log(books.getBook());

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 2021-07-07
      • 2018-09-11
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多