AS3 - изменить логическое (объектное) поведение - PullRequest
5 голосов
/ 20 мая 2011

Когда вы приводите какой-либо объект к логическому значению, вы получаете true, если это не null, а false в противном случае, я хотел бы изменить это поведение для некоторых объектов. Я хочу, чтобы некоторые объекты возвращали false, даже если они не null

Я знаю, что в ActionScript 3.0 мы можем изменить поведение объекта по умолчанию, используя Proxy. Можем ли мы сделать то же самое для Boolean(object) или object as Boolean? И как это можно сделать?

Я хочу спросить об этом после следующей мысли:

У меня есть этот код:

if (someObject)
    someObject.DoSomething();

Это означает, что DoSomething вызывается только в том случае, если someObject не null, а только потому, что "реальный" код этого:

if (Boolean(someObject) == true)
    someObject.DoSomething();

И работает, потому что любой объект автоматически преобразуется в логическое значение, и результат равен true, но если ссылка указывает на null, результат равен false.

Я хочу знать, смогу ли я изменить поведение ТА без добавления новой функции, например isTrue(someObject) или чего-то подобного.

Заранее спасибо, и извините за мой плохой английский.

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Нет, CustomClass (объект) и as являются операторами приведения, поведение обоих определяется языком.А Boolean (объект) - это, на самом деле, глобальная функция с определенным языком поведением (и нет перегрузки функций.) В ActionScript 3.0 нет оператора уровня класса для приведения типов, вам нужно реализовать некоторое свойство для true / falseчеки.

2 голосов
/ 20 мая 2011

Предупреждение: Proxy и Prototype очень медленные. И они делают ваше приложение менее простым в обслуживании, поскольку любой дополнительный программист должен будет учитывать необычное поведение других основных предложений в вашем приложении. Это может привести к трудностям поиска и устранения ошибок. Таким образом, в стороне от противостояния, я не думаю, что Прокси это то, что вы хотите. Я думаю, что вы хотите, это прототип. http://tobyho.com/Modifying_Core_Types_in_ActionScript_3_Using_the_Prototype_Object

А если серьезно, вы должны просто сделать функцию, которая проверяет классы, которые вы хотите оценить как ложные, вместо того, чтобы использовать логический оценщик. Сделайте функцию, которая возвращает логическое значение.

function isFalse(object:*):Boolean {
   if(object == false){
      return false;
   } else if (object is SpecialcaseClass){
      // perform special case test here. Return the value;
      return resultOfSpecialCaseTest;
   }
   return false;
}
...