Javascript OOP无法获得财产

时间:2016-03-17 09:42:20

标签: javascript oop

我试图将我的代码重写为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提前。

1 个答案:

答案 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/