Javascript对象文字-嵌套函数和"this"关键字
javascript object literal - nested functions and the "this" keyword
在下面的例子中,当functionA()
被调用时,this
关键字指的是包含它的对象,所以我可以访问它的属性(例如theValue
)
我的问题:如何从嵌套的 functionB()
中引用myObj
的属性?
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,你可以使用这个来使私有变量
您可以简单地使用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方法。简单地说,您可以绑定方法的this关键字。点击链接或使用搜索引擎了解更多细节。如果使用此方法,请注意它与较旧的浏览器不兼容,但提供的链接显示了可用于实现的替代实现。在旧浏览器中绑定方法。
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();
相关文章:
- $(this).prop('property') vs. this.property
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 重复“;function(){}.调用(this)"在Uglified JS中
- 这条线是什么意思"this.parentNode.firstChild.nodeName”;在jQuery H
- jqueryui:"类型错误:this.menu.element未定义"
- 为什么获胜't This Vuejs“;Hello World"示例在我的电脑上渲染
- "this.collection.each不是函数;.应该'它不是简单地说“;每个”;
- 为什么不't this replace()替换"我的“;
- 我的onsubmit=“;return onNewUserRegistrationCheck(this)"仍然
- <a href="javascript:foo(this)">通过Window,我想要标记
- 主干——哪个“这个”;是“this"
- How do i formulate "if this.children.has.not.class"
- 鼠标事件监听器&“this"
- <textarea onclick=“;this.value;this.select()">?这是什么
- "类型错误:this.options为null"在OpenLayers.Protocol.HTTP中
- 为什么是全球性的"this.function";如果没有";这个"