令人困惑的js对象属性

时间:2019-01-11 13:20:18

标签: javascript methods properties

var dataset = { num: 20 };
var svg = { w: 600 };
var column = {
    padding: 0.2,
    w: (svg.w/dataset.num)/(this.padding + 1),
    print: function(){
      console.log("through obj methord:" +
      (svg.w/dataset.num)/(this.padding + 1)
      );}
    };
column.print();
console.log(column);

上面的

是代码,可以执行它,结果中您会看到 column.w 的结果是 NAN ,而在obj的方法: print 可以给出正确的答案:25。

怎么可能?即使我将(svg.w / dataset.num)/(this.padding + 1)替换为 svg.w /(dataset.num *(this.padding + 1))< / strong>,它是完全一样的。 在我将其值替换为svg.w,dataset.num之类的变量后,column.w当然变为值25。

1 个答案:

答案 0 :(得分:0)

尝试将this.padding的值更改为0.25。

Javascript不知道您的this变量的含义。

  

“ this”变量是每个执行上下文都会获取的变量,在常规函数中,“ this”变量指向浏览器中的全局对象或窗口,这是默认值。在方法调用(它是变量中的函数)中,“ this”变量指向调用对象的方法。在实际定义了该变量的函数之前,不会为“ this”变量分配值。

在代码中使用this时,它仍然指向对象,您调用了哪个方法。该对象没有padding属性,这就是为什么您的计算无法执行的原因。

详细了解this变量here