"这个"里面的对象

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)

  • 我无法使用箭头功能,但这确实有效! (3认同)
  • 它不适用于箭头函数,因为箭头函数没有自己的`this` - 它使用来自父函数上下文的`this`. (2认同)