![](/img/trans.png)
[英]Javascript - how to use a variable as a function *and* an object literal
[英]How to use properties of an object literal without being inside a function in javascript
我在JS中创建了一个对象文字,但是想要在不使用函数的情况下访问属性。 每当我尝试,我没有得到任何结果或它返回null
。
JS:
var settings = {
prev: '#prev',
next: '#next',
slides: '#slides',
crslContainer: '#carousel',
//I'm trying to access the 'slides' by using 'this.slides'
inDent: $(this.slides).find('li').outerWidth(),
fx: 'rotate',
myFunction: function () {
console.log(settings.inDent); //This shows null in the console, why??
}
}
在上面的代码中,我试图通过使用this.slides
访问slides
,所有这些都在同一个对象中,但控制台显示为null
。 但是当我使用方法时, inDent: $('#slides').find('li').outerWidth()
,然后它就可以了。 这是为什么? 我假设它与使用this
关键字在函数内使用这些属性相同,显然情况并非如此。 我只想将该对象属性(即字符串)的值传递给另一个不是函数的属性。
非常感谢
您不能在对象文字中引用“正在定义的对象”。 也就是说,没有办法让under-construction对象的属性的值表达式引用对象本身,以便访问另一个(可能是已经定义的)属性。
但是,您可以在定义对象后向其添加属性。
var obj = { a: 0 };
obj.b = (obj.a ? 1 : 2);
或者在你的情况下:
var settings = { ... };
settings.inDent = ($(settings.slides).find('li').outerWidth());
你需要使用
this.inDent
只能在settings
对象定义之外通过settings.inDent
访问inDent
字段
使用闭包,例如
var settings = function(){
var private = {};
private.slides = '#slides';
var public = {}
public.inDent = ($(private.slides).find('li').outerWidth());
public.doSomething = function(){
console.log( public.inDent );
}
return public;
}();
这样做的好处还在于它可以免费为您提供“封装”
顺便说一下,你不应该依赖任何公开的东西,因为它可以改变,例如settings.inDent = null
然后settings.doSomething()
可能不再正常运行。 正确的做法是以下几点
...
private.inDent = ($(settings.slides).find('li').outerWidth());
public.inDent = private.inDent;
public.doSomething = function(){
console.log( private.inDent );
}
即使inDent
值“只读”(在某种意义上说, settings
对象之外的任何内容都不能实际更改private.inDent
的内部实现); 只要你总是在settings
使用private.inDent
你是安全的,因为即使有人做settings.inDent = null
, settings.doSomething();
仍将正常运作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.