Javascript 在对象内部定义的函数不';不返回值吗?

Javascript 在对象内部定义的函数不';不返回值吗?,javascript,object,Javascript,Object,我试图返回对象内部元素的名称。第二个元素是函数getBook()。我已经定义了第二个变量get name,它引用了对象内部的函数。我不确定是否可以使用return this.element。如果有人能解释我的代码失败的原因,我将不胜感激。多谢各位 var books = { name: 'Goodnight Moon', getBook() { return this.name; } }; var getName = books.getBoo

我试图返回对象内部元素的名称。第二个元素是函数
getBook()。我已经定义了第二个变量get name,它引用了对象内部的函数。我不确定是否可以使用return this.element。如果有人能解释我的代码失败的原因,我将不胜感激。多谢各位

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

var getName = books.getBook; 
console.log(getName());
您需要将其绑定到getName函数表达式。否则,
的上下文将引用
窗口
对象:

var书籍={
名字:'晚安月亮',
getBook(){
返回此.name;
}
};
var getName=books.getBook.bind(books);
log(getName())您需要将其绑定到getName函数表达式。否则,
的上下文将引用
窗口
对象:

var书籍={
名字:'晚安月亮',
getBook(){
返回此.name;
}
};
var getName=books.getBook.bind(books);

log(getName())当然你可以这么做

//相同的对象定义
var书籍={
名字:'晚安月亮',
getBook(){
返回此.name;
} 
};
//但呼吁:
books.getBook();

log(books.getBook())当然你可以这么做

//相同的对象定义
var书籍={
名字:'晚安月亮',
getBook(){
返回此.name;
} 
};
//但呼吁:
books.getBook();

log(books.getBook())卡尔,谢谢你花时间回复。请你解释一下为什么我们必须使用bind,为什么我的原始代码返回undefined?我更新了我的答案。如果需要进一步解释,请告诉我。@espresso_coffee:将
这个
视为另一个函数参数。调用方根据调用函数的方式将其设置为某个值。您也可以在调用时手动设置它,如
getName.call(books)
,或者如上所示,您可以使用
.bind()
创建一个新函数,该函数的值永久绑定为
this
的值。Carl,感谢您花时间响应。请你解释一下为什么我们必须使用bind,为什么我的原始代码返回undefined?我更新了我的答案。如果需要进一步解释,请告诉我。@espresso_coffee:将
这个
视为另一个函数参数。调用方根据调用函数的方式将其设置为某个值。您还可以在调用时手动设置它,如
getName.call(books)
,或者如上所示,您可以使用
.bind()
创建一个新函数,该函数的值永久绑定为
this
的值。