如何在不位于javascript函数内部的情况下使用对象文字的属性
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
关键字在函数中使用这些属性是一样的,但事实并非如此。我只想把对象属性的值,即字符串,传递给另一个不是函数的属性。
非常感谢
不能在对象文字中引用"正在定义的对象"。也就是说,没有办法让正在构建的对象的属性的值表达式引用对象本身来访问另一个(可能已经定义)属性。
但是,可以在定义对象后将属性添加到对象中。
var obj = { a: 0 };
obj.b = (obj.a ? 1 : 2);
或者在您的情况下:
var settings = { ... };
settings.inDent = ($(settings.slides).find('li').outerWidth());
您需要使用
this.inDent
inDent
字段只能在settings
对象定义之外通过settings.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();
仍然可以正常工作
- 在不知道深度或父属性的情况下从对象中删除属性
- 如何在不使用 new 关键字的情况下从函数创建对象
- 如何在不知道关键字的情况下访问javascript对象值
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 是否可以在不重新渲染的情况下显示/隐藏父对象中的元素
- 在禁用ng的情况下搜索JSON对象(AngularJS)
- 如何在不安装npm的情况下一次性扩展对象
- 是否可以在不创建svg对象的情况下创建捕捉元素?[snap.svg]
- 是否可以在不序列化的情况下将对象从SilverLight传递到JavaScript
- 在知道对象值的情况下,确定数组中JS对象的索引
- 在不重构Mongo数据库的情况下,更新嵌入数组中的具有给定ID的对象
- 如何避免在这种情况下修改事件对象
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 是否可以在不加对象名称前缀的情况下调用对象的函数
- 在不使用object.Create的情况下创建具有null原型的javascript对象
- 我可以在不使用XMLHttpRequest或文档对象的情况下使用Javascript来获取网页吗
- 如何在不选择模式配置参数的情况下,使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach
- 如何在不破坏shouldComponentUpdate的情况下传递对象/子对象作为道具
- 在不使用jQuery的情况下连接两个JSON对象