【问题标题】:confusing js objects propertis [duplicate]令人困惑的js对象属性[重复]
【发布时间】:2019-01-11 13:20:17
【问题描述】:

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)) ,完全一样。 在我用它的值替换像 svg.w、dataset.num 这样的变量之后,column.w 当然变成了值 25。

【问题讨论】:

  • 不知道你的 this 变量指的是什么,很难说。
  • 如果您将 w: ..... 替换为 w: function() {return (svg.w/dataset.num)/(this.padding + 1);然后用 column.w() 调用它就可以了
  • 是的,我已经做到了,我只是混淆了为什么@Bolphgolph
  • @HuangQinlai 我建议你阅读这个问题下的答案stackoverflow.com/a/2787621/7241459
  • @Bolphgolph 谢谢

标签: javascript methods properties


【解决方案1】:

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

Javascript 不知道您的 this 变量指的是什么。

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

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

详细了解this 变量here

【讨论】:

  • 你的意思是只在函数中,this关键字会知道它指的是哪个对象?
  • 谢谢,因为这是属性中默认的全局变量,所以不能引用column对象。并且我还尝试将this替换为column,它说column是未定义的,没有运行列定义语句,所以我认为我应该在需要时使用该方法这个
猜你喜欢
  • 2013-03-07
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2018-03-21
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
相关资源
最近更新 更多