在下面的例子中,何时 functionA()
被调用, this
keyword是指包含对象,因此我可以访问其属性(例如 theValue
)
我的问题: 我如何参考。的属性 myObj
来自内部 嵌套 functionB()
?
var myObj = {
theValue: "The rain in Spain",
functionA: function() {
alert(this.theValue);
},
moreFunctions: {
functionB: function() {
alert(????.theValue);
}
}
}
myObj.functionA();
myObj.moreFunctions.functionB();
提前致谢。
立即援引救援!
var myObj = (function () {
var that = {
theValue: "The rain in Spain",
functionA: function() {
alert(this.theValue); // or that.theValue, both work here
},
moreFunctions: {
functionB: function() {
alert(that.theValue);
}
}
};
return that;
}()); // <-- immediate invocation !!
您可以进一步分解它:
var myObj = (function () {
function functionA() {
alert(that.theValue);
}
function functionB() {
alert(that.theValue);
}
var that = {
theValue: "The rain in Spain",
functionA: functionA,
moreFunctions: {
functionB: functionB
}
}
return that;
}());
如果您熟悉OOP,可以使用它来制作 私人的 变量。
立即援引救援!
var myObj = (function () {
var that = {
theValue: "The rain in Spain",
functionA: function() {
alert(this.theValue); // or that.theValue, both work here
},
moreFunctions: {
functionB: function() {
alert(that.theValue);
}
}
};
return that;
}()); // <-- immediate invocation !!
您可以进一步分解它:
var myObj = (function () {
function functionA() {
alert(that.theValue);
}
function functionB() {
alert(that.theValue);
}
var that = {
theValue: "The rain in Spain",
functionA: functionA,
moreFunctions: {
functionB: functionB
}
}
return that;
}());
如果您熟悉OOP,可以使用它来制作 私人的 变量。
你可以简单地使用 myObj
:
alert(myObj.theValue);
检查演示 http://jsbin.com/izugon/2/edit
通常的做法是定义一个“self”变量并使用它而不是this关键字。当您希望添加范围或创建类时,这会有所帮助。
var myObj = new function(){
var self = this;
this.theValue = "The rain in Spain";
this.functionA = function() {
alert(self.theValue);
},
this.moreFunctions = {
functionB: function() {
alert(self.theValue);
}
}
}();
myObj.functionA();
myObj.moreFunctions.functionB();
另一种可能性是使用ECMA5 Function.prototype.bind方法。简单地说,你可以绑定一个方法 这个 关键词。 请点击链接或使用搜索引擎获取更多详细信息。如果您使用此方法,请注意它与旧版浏览器不兼容,但提供的链接显示了您可能用于实现 .bind 旧浏览器中的方法。
var myObj = new function(){
this.theValue = "The rain in Spain";
this.functionA = function() {
alert(this.theValue);
}.bind(this);
this.moreFunctions = {
functionB: function() {
alert(this.theValue);
}.bind(this)
};
}();
myObj.functionA();
myObj.moreFunctions.functionB();