令人费解的绑定.如何将一个对象绑定到另一个对象
confusing bind. how to bind an object to another?
在此代码中,
var person = {
first: 'person',
last: 'sdfsd',
full: function fullName() {return this.first + ' ' + this.last;}
}
var john = {
first: 'person',
last : 'sdfsd'
}
我如何将john绑定到person,使得像
这样的东西var Name = john.bind(person)
可以调用:
Name.full();
尝试了一些事情,得到:这一点。full不是函数OR名字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
所以我推断:
- bind只作用于函数。对吗?
- 我认为,如果我像
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();
}
并将其绑定到person fellow:
var janeName = jane.bind(person);
janeName();
我:
person sdfsd
在控制台中。然而,问题的根源在于获取在Jane中定义的第一个和最后一个变量,如果我可以选择:
janeName.call(jane, 'jane', 'austen');
这回报:
jane austen
如果我错了请纠正我。janeName像往常一样是jane,但是this绑定到Person。但是,使用.call janeName调用是jane绑定到person并提供可选参数,这里实际上jane调用本身,提供可选参数,但反过来又绑定到person,当查找时。完整的函数。
Simple:
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();
我是这样更清楚地理解bind的。而不是考虑基于类的方法调用.bind(),考虑动态作用域,考虑this,其中this将绑定到哪个函数以产生输出:
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的第一个和最后一个的输出:
john sdfsd
这个函数在Person中,叫做full;
如果我绑定完整函数约翰,这引用约翰。
var Name = person.full.bind(john);
Name();
相似的,
如果我想人的输出
john.fl.call(person);
我将不得不捆绑约翰。呼叫的人。在这里,
this.full();
in john。fl 被称为由人 => person.full()
将其设置为一个变量,以便在更改上下文时可以引用。
了解Bind的更多细节:
点击这里
所以一定是
这里我们将john上下文设置为Person。基于此,它返回John的Context
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();
相关文章:
- 值未与数组对象绑定
- Angular:将函数从子对象绑定到父对象
- 将 .on 事件与对象绑定
- 挖空选项对象绑定
- 对象绑定模式的rest属性应该是最后一个
- Knockout.js用单个json对象绑定一个可观察对象
- angular.js将jquery自动完成对象绑定到ng模型,将值输入到对象的属性
- Knockout:为许多数据对象绑定模板引导模式
- JavaScript 对象绑定
- 使用javascript将JSON对象绑定到asp.net gridview控件
- 如何将一个事件绑定两次到 JavaScript 插件
- 如何将复杂对象绑定到剑道调度程序中的字段
- D3:如何有条件地将 SVG 对象绑定到数据
- Ko_selectize数组对象绑定未定义
- 在选择框中从任意 JavaScript 对象绑定选项值和选项文本
- 获取一个提交绑定为KnockoutJs的对象
- AngularJS:如何将一个常量对象绑定到一个指令
- 令人费解的绑定.如何将一个对象绑定到另一个对象
- 将多个可观察对象绑定到一个自定义的bindingHandler
- 使用jquery $.data将一个对象绑定到另一个对象