Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Длина массива в объекте (https://javascript.ru/forum/misc/24496-dlina-massiva-v-obekte.html)

diagnost 02.01.2012 23:47

Длина массива в объекте
 
Имеется скрипт:

<script>

function Lingvo() {
	var Eng = [];
	var Rus = [];
	this.count = 0;
	this.Eng = Eng;
	this.Rus = Rus;
	this.AddEng = function (EngWord) {
		Eng.push(EngWord);
		this.count += 1;
	}
	this.AddRus = function (RusWord) {
		Rus.push(RusWord);
	}
}

var LWord = new Lingvo;
LWord.AddEng("father");
LWord.AddRus("папа");
LWord.AddEng("he");
LWord.AddRus("он");
LWord.AddEng("bread");
LWord.AddRus("хлеб");

alert (LWord.count);
</script>

Нельзя ли более грамотно получать длину массива Lingvo.count без суммирования?

zebra 03.01.2012 00:00

Eng.length
Rus.length

diagnost 03.01.2012 00:05

Не работает, будет равно нулю. length в объекте, судя по всему, присваивается в самом начале, когда массивам еще не переданы величины после создания объекта:
//this.count = 0;
this.count = Eng.length

//.........
alert (LWord.count);// = 0

Вот потому и спрашиваю. length хотелось бы получить однократно без постоянного суммирования, может быть через вызов функции, но как - не соображу.

zebra 03.01.2012 00:10

После вашего кода вызовите
alert(LWord.Eng.length, LWord.Rus.length);

diagnost 03.01.2012 00:15

Так работает, но хотелось бы иметь свойство "второго" порядка, а не "третьего". То-есть не LWord.Eng.length, а LWord.count

zebra 03.01.2012 00:16

Ну так в чём проблема? Создать отдельное свойство которое вернет length? ;)

diagnost 03.01.2012 00:21

Как?
this.count = Eng.length

или
this.count = this.Eng.length

в обоих случаях LWord.count будет равен нулю.

zebra 03.01.2012 00:24

this.count = function() {
    return Eng.length;
};

diagnost 03.01.2012 00:28

Результат отрицательный. В окне после вызова alert (LWord.count) выводится:
function() {
    return Eng.length;
}

zebra 03.01.2012 00:31

Покажите весь код


Часовой пояс GMT +3, время: 12:42.