Javascript:引用变量

Javascript:引用变量,javascript,Javascript,嗨,我可以知道,有没有其他的实现让我达到与上面代码相同的效果 为什么我不能得到stoleIdentity的结果?JavaScript中的这个是由非常具体的情况定义的;我们感兴趣的是“方法调用”,如下所示: var foo = { _name: 'John', getIdentity: function (){ return this._name; } }; var stoleIdentity = foo.getIdentity; console

嗨,我可以知道,有没有其他的实现让我达到与上面代码相同的效果


为什么我不能得到
stoleIdentity
的结果?

JavaScript中的这个
是由非常具体的情况定义的;我们感兴趣的是“方法调用”,如下所示:

    var foo = {
    _name: 'John',
    getIdentity: function (){
        return this._name;
    }
};

var stoleIdentity = foo.getIdentity;

console.log(stoleIdentity());
console.log(foo.getIdentity());
如果函数调用中未提及接收方,则它是普通函数调用,而不是方法调用,
未设置

因此,
foo.getIdentity()
是一个方法调用,它将
this
设置为
foo
,并将
this.\u name
计算为
foo.\u name
stoleIdentity()
是一个普通的函数调用,它不会更改
this
this。_name
可能会访问
窗口。_name
,除非
this
同时以其他方式更改

您可以使用
function.prototype.bind
(更改
的另一种方法)将接收器绑定到函数值。因此,如果改用这一行,代码将正常工作:

receiver.method(argument_list...)

这是JavaScript中的
由非常特定的环境定义的;我们感兴趣的是“方法调用”,如下所示:

    var foo = {
    _name: 'John',
    getIdentity: function (){
        return this._name;
    }
};

var stoleIdentity = foo.getIdentity;

console.log(stoleIdentity());
console.log(foo.getIdentity());
如果函数调用中未提及接收方,则它是普通函数调用,而不是方法调用,
未设置

因此,
foo.getIdentity()
是一个方法调用,它将
this
设置为
foo
,并将
this.\u name
计算为
foo.\u name
stoleIdentity()
是一个普通的函数调用,它不会更改
this
this。_name
可能会访问
窗口。_name
,除非
this
同时以其他方式更改

您可以使用
function.prototype.bind
(更改
的另一种方法)将接收器绑定到函数值。因此,如果改用这一行,代码将正常工作:

receiver.method(argument_list...)

当您将foo.getIdentity指定给stoleIdentity时,此选项已更改。您可以将此日志记录下来以进行检查

使用此绑定将其绑定到stoleIdentity以使其工作

var foo={
_姓名:'约翰',
getIdentity:函数(){
返回此。\u名称;
}
};
var stoleIdentity=foo.getIdentity.bind(foo);
log(stoleIdentity());

log(foo.getIdentity())当您将foo.getIdentity指定给stoleIdentity时,此选项已更改。您可以将此日志记录下来以进行检查

使用此绑定将其绑定到stoleIdentity以使其工作

var foo={
_姓名:'约翰',
getIdentity:函数(){
返回此。\u名称;
}
};
var stoleIdentity=foo.getIdentity.bind(foo);
log(stoleIdentity());

log(foo.getIdentity())这应该是答案。非常感谢您的解释。这让我明白了。这应该是答案。非常感谢你的解释。它让我明白了。