Другой немаловажный и почти очевидный факт, это то, что аргументы назначаются только в соответствии с их расположением и ни с чем другим. Если мы передадим верхнему классу Dog два свойства: hair и age *именно в таком порядке*, то этот порядок не будет изменён, даже если ваш класс использует те же имена (age и hair). Аргумент age всегда получает первое переданное значение, аргумент hair, всегда второе. Вот пример, основанный на старом мультике (тут я, признаться, обязан кое-чем Джиму Юнгеру!)
marylin = new Date(36,22,35); bridgette = new Date(38,23,36); herman = new BlindDate(42,18,37);
но когда вы рассматриваете классы:
function Date( bust, waist, hips ) { this.bust = bust; this.waist = waist; this.hips = hips; }
пока что всё великолепно...
function BlindDate( age, IQ, shoeSize ) { // uh ohhh... this.age = age; this.IQ = IQ; this.shoeSize = shoeSize; }
... очевидно, что класс получает только значения и класс же решает, что эти значения означают, простите за каламбур (!).
Последнее, о чём стОит упомянуть - тот факт, что при передаче происходит сортировка "по значению". Таким образом, аргументы представляют только значение того, что было передано, а не изначальное имя или объект. Разумеется, если мы передаём объект, как значение, то изменения, произошедшие с ним, будут отражены в объекте. Суть в том, что только значения играют роль. Посмотрите на следующий (не вполне объектно-ориентированный) код:
function test(arg1, arg2) { arg1 = "changed"; arg2.prop2 = 6; } arg1 = "original"; arg2 = { prop1:5 } test( arg1, arg2 );
trace( arg1 ); // "original" - не изменился trace( arg2.prop1 +" & "+ arg2.prop2 ); // 5 & 6 - prop2 был добавлен к объекту
Функция получает только значение того, что передано, а не исходный объект. Это также относится и к классам и к методам (о последних мы скоро поговорим).
Итак, подводя итоги, можно сказать, что экземпляр, вызывающий класс должен проверить класс на предмет того, какие аргументы ему (классу) нужны и в каком порядке. При передаче аргументы сортируются в соответствии с их значением. Аргументов мы коснёмся более детально в дальнейшем, при рассмотрении массива аргументов.
<<
ООП во Flash 5 >>