如何使用闭包的apply/call通过嵌套对象传递变量
How do you pass variables through nested objects using apply/call for closures
即使在阅读了网站和SO上的教程之后,我也无法理解call/apply如何工作。我了解基本的机制,直到事情变得嵌套。如果不依赖that = this,我该如何使用call函数来代替闭包呢?
var createPerson = function () {
var that = this;
var name;
return {
bio: {
name: function (name) {
that.name = name;
}
},
getInfo: {
getName: function () {
return that.name;
}
}
}
}
var john = createPerson();
john.bio.name("Johnathan");
console.log(john.getInfo.getName());
你所要做的就是在你的函数上使用this
,并在返回的对象上使用call
。
var createPerson = function () {
return {
bio: {
name: function (name) {
this.name = name;
}
},
getInfo: {
getName: function () {
return this.name;
}
}
}
}
var john = createPerson();
john.bio.name.call(john, 'Jonathan');
console.log(person.getInfo.getName.call(john));
Function.prototype.call
将调用您的函数,john
为this
。
Function.prototype.bind
示例:
var createPerson = function () {
var person = {
bio: {},
getInfo: {}
};
person.bio.name = Function.bind.call(function (name) {
this.name = name;
}, person);
person.getInfo.getName = Function.bind.call(function () {
return this.name;
}, person);
return person;
}
var john = createPerson();
john.bio.name("Johnathan");
console.log(john.getInfo.getName());
请注意,您可以很容易地将它替换为:
var createPerson = function () {
var person = {
bio: {},
getInfo: {}
};
person.bio.name = function (name) {
person.name = name;
}
person.getInfo.getName = function () {
return person.name;
}
return person;
}
var john = createPerson();
john.bio.name("Johnathan");
console.log(john.getInfo.getName());
相关文章:
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 如何打印嵌套对象的所有值
- 设置嵌套对象属性的更好方法
- 嵌套对象结构
- 如何递归地获取嵌套对象中所有子对象的列表
- 更改嵌套对象的父子相关id
- 如何通过json对象数组为嵌套对象赋值
- Ember.js(2.5.0)如何设置嵌套对象值
- 嵌套对象文本访问父级
- 如何对两个嵌套对象进行排序
- 在javascript中使用方括号表示法的嵌套对象
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- 更新嵌套对象的多个字段
- MongoDB嵌套对象数组后查询
- 在流星中插入嵌套对象
- 将嵌套对象数据添加到窗体中
- Chai深度包含了对嵌套对象的断言
- 使用Angular.js解析JSON中的嵌套对象数组
- 如何以编程方式添加到可变嵌套对象中
- Javascript嵌套对象访问根级别