mhe*_*mhe 53 javascript object this
我正在尝试从通过请求传入的宽度计算比例高度(同时排除静态高度元素)(默认为560).
但是,wF.h评估为NaN.如果我this.w用560 替换它可以工作,但在尝试引用w属性时则不行wF.
var wF = {
w : 560,
h : (312 - 42) / (560 / this.w) + 42
};
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
我拒绝连续使用两个普通的变量,因为我试图从JS中获得很好的代码.
更新:
感谢所有帮助解释和解决我的问题的人.我想我只需要习惯它.我将分阶段设置对象以继续项目,即使它仍然让我稍微烦恼;).对于遇到类似问题的人,我发现并阅读了一篇关于这个主题的好文章:http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/
Lig*_*ica 68
// Your code
var wF = {
w : 560,
h : (312 - 42) / (560 / this.w) + 42
};
Run Code Online (Sandbox Code Playgroud)
this 不是你想的那样JavaScript有没有块范围,唯一的功能范围:this里面的定义wF并没有参考wF.
(所以this.w,无论如何this,很可能undefined.按undefined收益率划分NaN.)
那么你可以试试:
// Let's not use `this`
var wF = {
w : 560,
h : (312 - 42) / (560 / wF.w) + 42
};
Run Code Online (Sandbox Code Playgroud)
但是,您仍然在定义您尝试使用的对象wF.w:它还没有为此做好准备.
所以,是的,你将不得不使用两个变量......或者分阶段设置对象:
// We can't even use `wF`; split up the property definitions
var wF = {};
wF.w = 560;
wF.h = (312 - 42) / (560 / wF.w) + 42;
Run Code Online (Sandbox Code Playgroud)
hou*_*uss 24
嗨,只需重新定义您的第二个属性作为一个功能对象,它将工作.我认为可以从函数中访问调用对象的上下文
var wF = {
w : 560,
h : function() { return (312 - 42) / (560 / this.w) + 42; }
};
alert(wF.h())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29568 次 |
| 最近记录: |