我试图将我的代码重写为OOP方法,但却陷入困境。 有一个例子:
var counter = {
column: {
estimation: "tr td:nth-child(3)",
worked: "tr td:nth-child(4)",
ratio: "tr td:nth-child(5)",
difference: "tr td:nth-child(6)"
},
columnLength : function display(){
return $(this.column.estimation).length;
},
好的,它有效! 但是,如果我写的几乎相同,但不是在函数中:
var counter = {
column: {
estimation: "tr td:nth-child(3)",
worked: "tr td:nth-child(4)",
ratio: "tr td:nth-child(5)",
difference: "tr td:nth-child(6)"
},
columnLength : $(this.column.estimation).length
},
它没有,有错误: 列未被声明。
为什么它必须在运作? Thx提前。
答案 0 :(得分:0)
问题在于,当您在jQuery选择器this
中使用$(...)
时,它的值是全局对象window
而不是对象counter
。因此,基本上,您尝试调用对象窗口window.column
的属性列,它不存在。
如果您运行以下代码,则会看到this
的价值:
var counter = {
column: {
estimation: "tr td:nth-child(3)",
worked: "tr td:nth-child(4)",
ratio: "tr td:nth-child(5)",
difference: "tr td:nth-child(6)"
},
columnLength: console.log(this)
}
那么,为什么会这样呢?
因为当您将已执行的函数分配给文字对象的参数时,该函数将在全局上下文中执行。
有关this
的使用的更多信息:http://blog.kevinchisholm.com/javascript/context-object-literals/