如何从内部函数c1访问container.a?
var container = {
a : 'blah',
b : function(){
console.log(this.a); // prints 'blah'
},
c : {
// how to access container.a from here?
c1: function(){
// and here?
}
}
}
答案 0 :(得分:4)
只需将容器称为封闭
即可var container = {
a : 'blah',
b : function(){
console.log(this.a); // prints 'blah'
},
c : {
c1: function(){
console.log(container.a)
}
}
}
答案 1 :(得分:3)
按名称:
var container = {
a : 'blah',
b : function(){
console.log(this.a); // prints 'blah'
},
c : {
// how to access container.a from here?
c1: function(){
console.log(container.a);
// and here?
}
}
}
答案 2 :(得分:3)
你可以引用包含对象引用的外部变量,但这不一定是稳定的。如果更改“容器”的值,它将不起作用。为了防止这种情况,您可以将对象定义封装在匿名函数中:
var container = function() {
var obj = {
a : 'blah',
b : function(){
console.log(this.a); // prints 'blah'
},
c : {
c1: function(){
console.log(obj.a)
}
}
};
return obj;
}();
看起来非常相似,但通过这样做,你可以保证“obj”的值不会改变(除非对象中的某些其他功能改变它,这将是一个奇怪的要做的事)。现在,无论最初分配给“容器”的对象发生了什么,.c.c1()
函数都将继续工作。