使用同一对象的不同键/值时计算obj键的值?

时间:2014-10-29 20:39:45

标签: javascript object

如何从同一对象内的键pageSizes.w/pageSize.h计算pageSize.offset?

   var pageSizes = {
              w: parseInt(scope.page.imagewidth),
              h: parseInt(scope.page.imageheight),
              offset: (pageSize.w/pageSize.h)
            }

   console.log('page.offset', pageSizes.offset);

目前我收到了RefferenceError:未定义pageSize。

我认为这是不可能的。那么,最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

将其设为功能并使用this

var pageSizes = {
          w: parseInt(scope.page.imagewidth, 10), //Dont forget the radix!
          h: parseInt(scope.page.imageheight, 10), //Dont forget the radix!
          offset: function() {
              return this.w/this.h;
          }
        }

console.log('page.offset', pageSizes.offset());

另外,不要忘记parseInt函数

中的基数

答案 1 :(得分:3)

显然这适用于firefox,opera,safari,chrome,甚至是IE9:

var pageSizes ={
          w: parseInt(scope.page.imagewidth, 10), //Dont forget the radix!
          h: parseInt(scope.page.imageheight, 10), //Dont forget the radix!
           get offset () {
              return this.w/this.h;
          }
 };

它就像方法一,但你不必调用它,让它像其他属性一样。

控制台友好版本:

    var pageSizes ={
              w: 5,
              h: 10,
               get offset () {
                  return this.w/this.h;
              }
     };

JSON.stringify(pageSizes); // == "{"w":5,"h":10,"offset":0.5}"

我总是使用Object.defineProperty(ODP)来获取getter和setter,但这似乎比我想象的要多得多。你每天都学到一些东西。它看起来像一个错字,缺少冒号和“功能”和所有,但它的工作原理。非常酷。

感谢robG的评论,这让我再次检查了参考资料。

有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Example:_Defining_a_getter_with_the_get_operator

答案 2 :(得分:0)

函数对特殊关键字“this”有所依据,它指向当前作用域(或父作用域的典型范围,直到全局作用域)或当前对象实例,此处指向PageSizes对象 使用此

      var pageSizes = {
      w: parseInt(scope.page.imagewidth),
      h: parseInt(scope.page.imageheight),
      offset: function() {
          return this.w/this.h;
      }
    }

然后选择这一行,因为它不是一个属性,它现在是一个函数

    console.log('page.offset', pageSizes.offset);

   console.log('page.offset', pageSizes.offset());
相关问题