2014-10-29 32 views
0

如何從同一對象內的鍵pageSizes.w/pageSize.h計算pageSize.offset?在使用同一對象的不同鍵/值時計算obj鍵的值?

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未定義。

我假設這是不可能的。因此,如何做到這一點最好?

+0

與漏分配和臨時瓦爾:VAR X; {w:x = parseInt(scope.page.imagewidth),offset:w * 2} – dandavis 2014-10-29 20:43:20

+0

pageSizes和pageSize有一個區別。更好的方法是計算w,h和偏移量,然後從這些對象中創建對象。 – Absor 2014-10-29 20:44:24

+0

爲了避免必須記住* offset *是一種方法,其他是屬性,您可以使用[* getter *](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /函數/ get)在* offset *或[* setter *](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)上設置其值兩個屬性(小心零除)。或將名稱更改爲* getOffset *。 – RobG 2014-10-29 20:47:52

回答

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功能

+0

嘿,這被認爲是封閉?對我仍然如此模糊? – 2014-10-29 20:46:32

+0

@tyme已經給出了答案,對不起,我沒有看到這之前發佈我的 – 2014-10-29 20:49:13

+0

@Absor上面說過,最好不要這樣做?這個想法是否恰當? – 2014-10-29 20:50:22

0

功能refence特殊關鍵字「這個」指向當前範圍(或protypical範圍)或當前對象實例,這裏指向頁面大小對象 使用此

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

,然後chnage這條線,膠印它不是一個屬性是一個函數現在

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

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

顯然這個工作在Firefox,歌劇,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的評論,這讓我再次檢查ref。

看到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Example:_Defining_a_getter_with_the_get_operator的細節

+0

嗯,這是非常好的:) – 2014-10-29 21:02:39

+0

它不會工作:C張貼的照片上面 – 2014-10-29 21:04:21

+0

nm它確實與該功能工作。它不會在ie8 tho工作嗎? – 2014-10-29 21:05:55

相關問題