Javascript 使用括号调用时,TypeError不是函数

Javascript 使用括号调用时,TypeError不是函数,javascript,typeerror,Javascript,Typeerror,我想知道为什么将括号添加到hero.getSecretIdentity()会导致TypeError,但是如果我直接在我的console.log中引用它,它会正常工作 var hero = { _name: 'John Doe', getSecretIdentity: function (){ return this._name; } }; var stoleSecretIdentity = hero.getSecretIdentity.bind(hero

我想知道为什么将括号添加到hero.getSecretIdentity()会导致TypeError,但是如果我直接在我的console.log中引用它,它会正常工作

var hero = {
    _name: 'John Doe',
    getSecretIdentity: function (){
        return this._name;
    }
};

var stoleSecretIdentity = hero.getSecretIdentity.bind(hero);
var stoleSecretIdentity = hero.getSecretIdentity()

//TypeError: stoleSecretIdentity is not a function
console.log(stoleSecretIdentity());

//Works without issue
console.log(hero.getSecretIdentity());

您正在这里调用函数

var stoleSecretIdentity = hero.getSecretIdentity();  // braces call the function
所以

不是函数,但设置为函数返回值

如果你想这样写:

var stoleSecretIdentity = hero.getSecretIdentity; // << without braces

您正在这里调用函数

var stoleSecretIdentity = hero.getSecretIdentity();  // braces call the function
所以

不是函数,但设置为函数返回值

如果你想这样写:

var stoleSecretIdentity = hero.getSecretIdentity; // << without braces

您正在这里调用函数

var stoleSecretIdentity = hero.getSecretIdentity();  // braces call the function
所以

不是函数,但设置为函数返回值

如果你想这样写:

var stoleSecretIdentity = hero.getSecretIdentity; // << without braces

您正在这里调用函数

var stoleSecretIdentity = hero.getSecretIdentity();  // braces call the function
所以

不是函数,但设置为函数返回值

如果你想这样写:

var stoleSecretIdentity = hero.getSecretIdentity; // << without braces

好的,我假设调用var stoleSecretIdentity=hero.getSecretIdentity时我会看到未定义的原因是getSecretIdentity被调用到全局上下文中,其中_name不存在,这就是使用bind的原因?您是否有任何理由希望使用.bind(此处)而不是从hero.getSecretIdentity()设置返回变量?在上面的示例中,我想我应该设置返回变量。使用bind,您可以指定此所指的内容,因此,两者都可以工作,尽管在上面的代码中使用它会有点过载,好吧,我假设调用var stolesecretidity=hero.getsecretidity时我会看到未定义的原因是getsecretidity被调用到全局上下文中,而在全局上下文中不存在_name,这就是使用的原因绑定您是否有任何理由希望使用.bind(此处)而不是从hero.getSecretIdentity()设置返回变量?在上面的示例中,我想我应该设置返回变量。使用bind,您可以指定此所指的内容,因此,两者都可以工作,尽管在上面的代码中使用它会有点过载,好吧,我假设调用var stolesecretidity=hero.getsecretidity时我会看到未定义的原因是getsecretidity被调用到全局上下文中,而在全局上下文中不存在_name,这就是使用的原因绑定您是否有任何理由希望使用.bind(此处)而不是从hero.getSecretIdentity()设置返回变量?在上面的示例中,我想我应该设置返回变量。使用bind,您可以指定此所指的内容,因此,两者都可以工作,尽管在上面的代码中使用它会有点过载,好吧,我假设调用var stolesecretidity=hero.getsecretidity时我会看到未定义的原因是getsecretidity被调用到全局上下文中,而在全局上下文中不存在_name,这就是使用的原因绑定您是否有任何理由希望使用.bind(此处)而不是从hero.getSecretIdentity()设置返回变量?在上面的示例中,我想我应该设置返回变量。使用bind,您可以指定此所指的内容,因此两者都可以工作,尽管在上面的代码中使用它有点过载