可能重复:
“this” inside object
我正在尝试为我正在处理的jQuery插件的几个默认选项创建一个对象文字:
var defaults = {
r: 5,
top: this.r,
bottom: this.r,
topleft: this.top,
topright: this.top,
bottomleft: this.bottom,
bottomright: this.bottom
};
当我引用defaults.top
时,undefined
我能做些什么来使这项工作?或者也许是另一种方法?我需要它成为一个对象文字。
添加了:
它是(default
对象),正如你所看到的那样,它的层叠方式是一种简短的技巧。例如,如果您想要将所有角定义为相同,则可以使用{r: 5}
,但如果您希望顶部和底部再次不同{top: 5, bottom: 1}
,请单独{topleft: 5, topright:2, bottomleft: 3, bottomright:19 }
我道歉不清楚这一点,但我非常感谢你的答案。
回答:这就是我最终做的事情
if(o.topleft == undefined || o.topright == undefined || o.bottomleft == undefined || o.bottomright == undefined){
if(o.top == undefined || o.bottom == undefined){
if(o.r == undefined){
o.topleft = 5;
o.topright = 5;
o.bottomleft = 5;
o.bottomright = 5;
}else{
o.topleft = o.r;
o.topright = o.r;
o.bottomleft = o.r;
o.bottomright = o.r;
}
}
else{
o.topleft = o.top;
o.topright = o.top;
o.bottomleft = o.bottom;
o.bottomright = o.bottom;
}
}
晚餐很邋,,但是嘿它有效!谢谢你的帮助!我之所以选择答案,是因为这种解释让我这样做了!
答案 0 :(得分:3)
“当我引用
defaults.top
时undefined
”
这是因为this
没有引用您正在创建的对象,而是来自运行代码的任何范围的this
。
对象文字语法不允许您通过引用同一对象中的其他属性来设置值 - 该对象尚不存在。 可以引用对象文字之前声明的其他变量或函数。因此,如果您需要所有属性与示例中的相同,那么您可以这样做:
var val = 5,
defaults = {
r: val,
top: val,
bottom: val,
topleft: val,
topright: val,
bottomleft: val,
bottomright: val
};
或者使用对象文字创建一些属性,然后设置其余属性:
var defaults = {
r : 5
};
defaults.top = defaults.bottom = defaults.r;
defaults.topleft = defaults.topright = defaults.top;
// etc
显然后者更适合将一些属性设置为一个值,将其他属性设置为另一个属性。 (尽管在您的示例中,所有属性都是相同的。)
无论哪种方式最终都会为您提供相同的对象(对象文字只是创建对象的快捷方式)。
“我希望能够做到这样简单
$(selector).myPlugin({r:10});
或$(selector).myPlugin({top:10, bottom: 5});
”
你还可以用对象文字作为参数调用插件。但是defaults
对象(我假设在插件中定义)可以使用其他技术定义。