2013-02-20 3 views
1

В AS2 я мог бы сделать следующее:ActionScript3 - увеличения прообразом струны

String.prototype.startsWith = function(s){ 
    return this.indexOf(s) == 1 
} 

таким образом, startsWith доступны на каждом объекте Струнный

var s = "some string to test with"; 
s.startsWith("some") // returns true 

и сделал это с большим хранилищем классных инструментов:

var s = "some @VAR string"; 
s.startsWith("some");//returns true 
s.endsWith("ing");//returns true 
s.contains("@");//returns true 
s.dataBind({VAR: "awsome"})// returns 'some awsome string' 
s = "b"; 
s.isAnyOf("a","b","c"); //true, because "b" is one of the options 
s.isInArr(["a","b","c"]); //true, because "b" is in the passed array 
var o = { foo: function(i) { return "wind " + i } } 
s = "foo"; 
f.call(o,3) //returns "wind 3" because method foo is ivoked on o with 3 
f.apply(o,[3]) //returns "wind 3" because method foo is ivoked on o with 3 
var a1 = [], a2 = [] 
s.push(a1,a2) // pushes s into a1 and a2 

И так далее и т. Д. Со многими интересными вещами, которые делают кодирование гораздо более увлекательным (и пытаясь быстро при использовании)

Речь идет не только о String, у меня есть такие utils для Number, Date, Boolean и т. д.

Вот что я пробовал:

[Test] 
public function test_stringPrototype() 
{ 
    String.prototype.startsWith = function(s):Boolean 
    { 
     return return this.indexOf(s) == 1; 
    } 

    assertTrue(!!String.prototype.startsWith) //and so far - so good ! this line passes 

    var s:String = "some str"; 
    assertTrue(!!o.startsWith) //and this won't even compile... :(
} 

И это даже не компилируется, не говоря уже пройти или не тест ... ошибка: Access of possibly undefined property startsWith through a reference with static type String.

Что способ сделать это в AS3?

ответ

0

Да, конечно, используйте строковое представление имени переменной: «startsWith»; Пример вниз

 String.prototype.traceME = function():void 
     { 
      trace(this); 
     } 

     var s:String = "some str"; 
     s["traceME"](); 

еще метод:

  var s:Object = new String("some str"); 
      s.traceME(); 
+0

Это сработало, хотя и делает код настолько менее элегантным ... рядом с этими утилитами, вот что я пытаюсь сделать: http://stackoverflow.com/questions/14882430/how-would-object-defineproperty-be- in-as3 –

+0

Но знаешь что? вопрос заключается в трюке ["..."], чтобы просто обмануть среду IDE и отказаться от предупреждений предварительной компиляции ... –

+0

да, вы правы, теперь я читаю сообщение из вашей ссылки, и я думаю об этом: var s: Object = new String ("some str"); s.startsWith(); и обмануть предупреждения предварительной компиляции –

1

вы всегда могли бы иметь класс, который будет собирать все эти методы и работы на строку, например,

package utils 
{ 
    public class StringUtils 
    { 
     public static function startsWith(input:String, test:String):Boolean 
     { 
      return input.indexOf(test) == 0; 
     } 
    } 
} 

использование:

trace(StringUtils.startWith("My string", "My")); 

или как "глобальная" функция:

package utils 
{ 
    public function startsWith(input:String, test:String):Boolean 
    { 
     return input.indexOf(test) == 0; 
    } 
} 

использование:

trace(startWith("My string", "My")); 

наилучшие пожелания

+0

Не то, что я ищу. Делает кодирование комбинированным. Если бы захотелось использовать статические утилиты, я бы запрограммировал C –

Смежные вопросы