在此代码中,
var person = {
first: 'person',
last: 'sdfsd',
full: function fullName() {return this.first + ' ' + this.last;}
}
var john = {
first: 'person',
last : 'sdfsd'
}
如何将john绑定到人,例如
var Name = john.bind(person)
可以致电:
Name.full();
尝试了几件事并获得: this.full不是函数OR Name.full不是函数;
我还想了解bind是否可以在上面的对象上使用,或者对象必须是一个使用bind的函数对象?
更新
当我这样做时:
var person = {
first: 'person',
last: 'sdfsd',
full: function fullName() {console.log(this.first + ' ' + this.last);}
}
var john = {
first: 'john',
last : 'sdfsd',
fl: function() {return this.full();}
}
var Name = person.full.bind(john);
Name();
我得到了
john sdfsd
所以我推断:
var Name = john.fl.bind(person);
那样绑定,那么 这个 就会在致电Name();
时与他人联系并致电console.log(person.first + ' ' + person.last);
但相反,我不得不交换2来获得正确的输出。有人能告诉我什么是绑定到什么?在x.bind(y)?? 更新2 我理解的一点.bind函数:
如果我创建这样的东西:
var jane = function (first, last) {
if (first) {this.first = first;}
if (last) {this.last = last;}
return this.full();
}
并将其绑定到上面的人:
var janeName = jane.bind(person);
janeName();
我明白了:
person sdfsd
在控制台中。但是,我的问题的根源是获取Jane中定义的第一个和最后一个变量,如果我可以选择:
janeName.call(jane, 'jane', 'austen');
返回:
jane austen
如果我错了,请纠正我。这是如何工作的janeName和往常一样,jane,但这个与Person绑定。 但是,使用.call janeName调用jane绑定到提供了可选args的人,这里实际上 jane 调用自身,提供了可选的args,但反过来又绑定到 .full 功能时, person 。
答案 0 :(得分:2)
简单:
john.full = person.full;
var name = john.full();
bind
方式如下:
var name = person.full.call(john); // call the full() function using john as context
var getName = person.full.bind(john); // create a function to get the full name from john
var name = getName();
答案 1 :(得分:0)
将此项设置为您可以在更改上下文时引用的变量。
所以一定是
这里我们将john上下文设置为Person。基于此,它返回约翰的语境
var person = {
first: 'tatdsfds',
last: 'sdfsd',
full: function fullName() {
document.write("content: "+this.first + " " + this.last);
return this.first + ' ' + this.last;}
}
var john = {
first: 'John',
last : 'Mr'
}
var Name = person.full.bind(john); //set our john context to the Person
Name();
答案 2 :(得分:0)
这是我理解绑定更清楚的方式。 而不是根据基于类的方法来考虑它,而是调用 .bind() ,根据这个来考虑动态范围,以及这个将绑定到哪个函数来生成什么输出:
var person = {
first: 'person',
last: 'sdfsd',
full: function fullName() {console.log(this.first + ' ' + this.last);}
}
var john = {
first: 'john',
last : 'sdfsd',
fl: function() {return this.full();}
}
如果我想要约翰的第一个和最后一个的输出:
john sdfsd
这里的功能是在Person中,名为 full ;
如果我将 完整 功能绑定到john, 此 请参阅john。
var Name = person.full.bind(john);
Name();
同样,
如果我想 此人的输出
john.fl.call(person);
我必须将john.fl绑定为调用 ed by person。在这里,
john.fl 中的 this.full();
由 人 =>调用person.full()