Наличие странной проблемы - по какой-либо причине доступ к родительскому объекту внутри свойства с использованием метода 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
}
Интересно, так как же оно работает внутри методов? все методы в объекте, возвращаемом после того, как объект был инициализирован? – user2381114
Потому что, когда вы создаете объект '' somemethod ": function() {...}' только устанавливает свойство 'somemethod' функции, но функция не выполняется до тех пор, пока не будет вызван метод. Таким образом, ссылка в методе 'MyObject' не оценивается до вызова метода. – Seamus
@ user2381114 Он работает внутри методов, потому что, когда методы действительно нужны и вызываются, литерал объекта был долго оценен и создан. В результате код внутри методов имеет доступ к фактическому объекту –