JavaScript:是否可以迭代你的 OWN 变量
JavaScript: Is it possible to iterate your OWN variables?
是否可以
实现"迭代"函数(下图),该函数迭代它自己的变量,而不是使用已弃用的JavaScript功能?
(function () {
var a = 1;
var b = 2;
var iterate = function () {
var k;
for (k in this) { //WRONG IMPLEMENTATION!
alert(this[k]);
// a
// b
// iterate
}
};
}).call(this);
我在"迭代"中设置了一个断点,并在调试器中四处寻找,但无法弄清楚如何访问其他变量名称。 此外,经过数十次谷歌搜索,我无法找到答案,因为搜索命中通常是指外部而不是内部视角。
更新:我混淆了属性和变量。 在编辑之前,最初的问题是询问迭代属性。 我现在意识到这些都是变数。
No.除了可怕的eval
黑客攻击之外,你不能以动态的方式访问任何范围内的变量,除了全局作用域(window
)或对象的范围(this
)。
但你不需要!如果要动态访问这些变量,请将它们存储在对象中:
var data = {
a: 1,
b: 2
};
我相信你想要hasOwnProperty。 每个对象都有此方法,您可以通过此方法向其传递属性名称(即,从使用 for
循环迭代中获得的内容),并了解该属性是否在给定对象上设置(因此不是继承的)。 因此,例如:
for (var k in this) {
if (this.hasOwnProperty(k)) {
// do something here...
}
}
您可能还想查看 Underscore.js它为此任务和许多类似任务提供了大量有用的快捷方式。
更新
我想我可能误解了这个问题... 如果您想知道是否有一种方法可以迭代所有范围内的变量,那么:没有,没有。
尝试
var j = (function (obj) {
var a = 1;
var b = 2;
var iterate = function () {
var k;
for (k in this) {
console.log(k, this[k]);
};
}.bind(obj);
obj["a"] = a; obj["b"] = b; obj["iterate"] = iterate;
return obj
}(Object.create(null))) || obj;
var j = (function (obj) {
var a = 1;
var b = 2;
var iterate = function () {
var k;
for (k in this) {
console.log(k, this[k]);
};
}.bind(obj);
obj["a"] = a; obj["b"] = b; obj["iterate"] = iterate;
return obj
}(Object.create(null))) || obj;
j.iterate();
j.a = 5;
j.iterate();
console.log(j)
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 将变量传递给外部Javascript
- JavaScript:是否可以迭代你的 OWN 变量