出现一个奇怪的问题 - 出于某种原因,使用call()
方法访问属性中的父对象只有在函数内部返回时才有效。
为什么我在第二个例子中无法访问MyObject,但我可以在第一个例子中?
我需要让第二个工作,因为我不想在循环中不断调用函数,因为它很慢并且看起来很糟糕。
我现在拥有的东西:
var MyObject = {
"selectorArray": ['[id*="example"]','[class*="example"]'],
"all": function() {
return Array.prototype.slice.call(document.querySelectorAll(MyObject.selectorArray.join()));
},
"somemethod": function () {
for (var i = 0; i < MyObject.all().length; i++) {
MyObject.all()[i] // do something etc
}
}
.. I need to use all() in loops other methods also
}
我想要什么(更快更好看)
var MyObject = {
"selectorArray": ['[id*="example"]','[class*="example"]'],
"all": Array.prototype.slice.call(document.querySelectorAll(MyObject.selectorArray.join())),
"somemethod": function () {
for (var i = 0; i < MyObject.all.length; i++) {
MyObject.all[i] // do something etc
}
}
.. I need to use all in loops other methods also
}
答案 0 :(得分:5)
MyObject
不存在。您无法使用MyObject.anything
来定义文字中MyObject.all
的值,因为您指的是尚未创建的对象的属性。相反,您可以从文字中提取所需的值:
var selectorArray = ['[id*="example"]','[class*="example"]'];
var MyObject = {
"selectorArray": selectorArray,
"all": Array.prototype.slice.call(document.querySelectorAll(selectorArray.join())),
"somemethod": function () {
for (var i = 0; i < MyObject.all.length; i++) {
MyObject.all[i] // do something etc
}
}
...
};