В литералах объекта вы можете использовать this
только для ссылки на объект, который вы объявляете внутри функции. Попробуйте следующее:
var testimonialsBelt = {
parentElment: $(".testimonialsCntnr ul"),
childrenElem: function() {
return this.parentElment.children().length;
}
};
Разница в вызове childrenElem заключается в том, что вместо использования alert(testimonialsBelt.childrenElem)
вместо него будет alert(testimonialsBelt.childrenElem())
.
В противном случае this
относится к текущей области видимости, в которой вы находитесь (обычно это окно, если вы объявляете литерал объекта как глобальный).
Обращаясь к вашему редактированию: я не уверен, что вы подразумеваете под "свободным javascript", но я предполагаю, что вы имеете в виду как можно более простой. В этом случае вы можете попробовать следующее, хотя я не большой поклонник этого метода. Это более многословно, но легко понять.
var testimonialsBelt = {
parentElment: $(".testimonialsCntnr ul")
};
testimonialsBelt.childrenElem = parentElment.children().length;
Это дает вам объект, где childrenElem
является статическим (он не изменяется) и избегает вызова $(".testimonialsCntnr ul")
дважды. Однако, если вы ожидаете, что $(".testimonialsCntnr ul").children()
изменится, вам нужно будет использовать мой первый пример.