Javascript 如何在JS对象初始化中使用bind()

Javascript 如何在JS对象初始化中使用bind(),javascript,this,Javascript,This,全部: 我想知道如果我想把它绑定到一个对象函数,我该怎么做?比如: var a = { name:"nihao", hello: (function(){ console.log(this.name); }).bind(this) } 当我运行a.hello()时,这是一个窗口。然后我将代码更改为: var a = { name:"nihao", hello: (function(){ console.log(th

全部:

我想知道如果我想把它绑定到一个对象函数,我该怎么做?比如:

var a  = {
    name:"nihao", 
    hello: (function(){
        console.log(this.name);
    }).bind(this)
}
当我运行a.hello()时,这是一个窗口。然后我将代码更改为:

var a  = {
    name:"nihao", 
    hello: (function(){
        console.log(this.name);
    }).bind(a)
}
什么都没有改变,所以我想知道当我初始化这个对象时,我如何能像这样绑定一个


谢谢

在本例中,您需要稍后绑定该函数;一旦“a”被初始化

a.hello = (function hello(){}).bind(a);

首先,不要在对象定义中添加绑定:

var a  = {
  name: "nihao", 
  hello: function(){
    console.log(this.name);
  }
}
然后,在调用过程中,传递您想要成为的对象
this

a.hello.call(a);
// => "nihao"

a.hello.call({name: "Kuan"});
// => "Kuan"
为什么不呢

var a={
姓名:“倪浩”,
您好:函数(){
console.log(this.name);
}
}

a、 你好@HunanRostomyan谢谢,你是说在这两种情况下?我尝试过,但都没有删除定义中的绑定并在调用过程中进行绑定。例如,
a.hello.call({name:'Kuan'})
将打印“Kuan”。不用说,如果您只调用
a.hello.call(a)
,您将得到“nihao”。只需根本不绑定您的函数,
a.hello()
的结果将是预期的结果:-),此外,如果您这里有一个单子。@Bergi谢谢,我使用它的原因是:我试图构建一个工厂函数,它可以从。顺便说一句,我还没有弄明白如何克隆一个对象,你能给我一些线索吗?谢谢,这意味着我只能在init之后进行绑定,对吗?如果你想绑定到“a”,在这种情况下是的。好的。谢谢你能告诉我一点细节吗?为什么init中的bind不起作用(比如JS引擎如何处理这个问题)bind在“init”期间起作用,但是你正在尝试绑定到一个在尝试绑定时未定义的“a”。正如Bergi指出的,您可能不需要绑定任何东西。但如果你这样做了,我的答案是正确的。谢谢,我使用这个的原因是:我正在尝试构建一个工厂函数,它可以从。顺便说一句,我还没有弄明白如何克隆一个对象,你能给我一些线索吗?谢谢你的提问,我想阻止“this”的更改。你能澄清一下
this
可能会更改的情况吗?试图理解您试图解决的上下文。谢谢您的提问,类似于var b={}b.hello=a.hello