如何从同一对象内的键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。
我认为这是不可能的。那么,最好的方法是什么?
答案 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的评论,这让我再次检查了参考资料。
答案 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());