Просмотр полной версии : Создание безымянного объекта (не работает)
ethereal999
16.03.2006, 02:30
Есть такой код из Пеннера:
Color.prototype.setBrightness = function (bright){
var trans = this.getTransform();
with (trans){
ra = ga = ba = 100 - Math.abs (bright);
rb = gb = bb = (bright > 0) ? bright * (256/100) : 0;
}
this.setTransform (trans);
}
MovieClip.prototype.setBrightness = function (bright){
(new Color(this)).setBrightness (bright);
}
mc.setBrightness (50);
так Флэш говорит, что нет такого метода для Color (хотя я только что его создал). А вот такой код работает:
MovieClip.prototype.setBrightness = function (bright){
var c = new Color (this);
c.setBrightness (bright);
}
mc.setBrightness (50);
Вопрос: так почему не работает конструкция (new Color(this)) для вновь созданного метода ?
Эксперимент показал, что такой синтаксис (*new Smth().func()*) работает только с экземплярами Object
почему - самому интересно
ethereal999
16.03.2006, 09:22
ну раз уж заговорил про Color, то я немного переработал метод Пеннера с учетом того, что в 8-ке Color не приветствуется:
import flash.geom.Transform;
import flash.geom.ColorTransform;
MovieClip.prototype.setBrightness = function (bright){
var mult = 1 - Math.abs (bright) / 100;
var offset = (bright > 0) ? bright * 2.56 : 0;
(new Transform (this)).colorTransform = new ColorTransform (mult, mult, mult, this._alpha / 100, offset, offset, offset, 0);
}
mc.setBrightness (50);
это конечно клево, но это не объясняет.
подождем матерых теоретиков.
а так?Color.prototype.setBrightness = function(bright) {
var trans = this.getTransform();
with (trans) {
ra = ga=ba=100-Math.abs(bright);
rb = gb=bb=(bright>0) ? bright*(256/100) : 0;
}
this.setTransform(trans);
};
MovieClip.prototype.setBrightness = function(bright) {
Object(new Color(this)).setBrightness(bright);
};
mc.setBrightness(50);
andr64, я тебе могу написать 300 способов реализовать этот алгоритм, но ни один из них не является объяснением того, почему не работает самый первый.
гы, интересно девки пляшуть %(
если вызывать методы Color которые определены по умолчанию то все работает.
Есть такой код из Пеннера:
Color.prototype.setBrightness = function (bright){
var trans = this.getTransform();
with (trans){
ra = ga = ba = 100 - Math.abs (bright);
rb = gb = bb = (bright > 0) ? bright * (256/100) : 0;
}
this.setTransform (trans);
}
MovieClip.prototype.setBrightness = function (bright){
(new Color(this)).setBrightness (bright);
}
mc.setBrightness (50);
так Флэш говорит, что нет такого метода для Color (хотя я только что его создал). А вот такой код работает:
MovieClip.prototype.setBrightness = function (bright){
var c = new Color (this);
c.setBrightness (bright);
}
mc.setBrightness (50);
Вопрос: так почему не работает конструкция (new Color(this)) для вновь созданного метода ?
типичные придирки AS2 компилятора: класс не динамический - ничего не добавишь..,
компилируем как AS1 и все ОК.
зы: второй вариант проходит, потому что var c не типизирована (проверки нет), поставь var c : Color и получишь тот же еррор..
зыы:проходит и такой вариант (компилятор 'не знает' чего вызываем):
MovieClip.prototype.setBrightness = function (bright){
(new Color(this))["setBrightness"] (bright);
}
ethereal999
16.03.2006, 20:54
andr64
Отлищщно ! Спасибо, дружище.
silin ох уж эти заковыристости...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.