2009-09-01 5 views
0

Я искал вверх и вниз по интернету даже для малейшего упоминания об этой «ссылке» и не нашел НИЧЕГО !!! Никто, кажется, вообще не говорит об этом. Я опытный программист на C++, поэтому я более чем знаком с идеей «этого» указателя/ссылки. Мой вопрос в том, какова именно эта ссылка в классе as3? При попытке редактировать его возникают ошибки компилятора. Присвоение его экземпляру другого класса, похоже, делает копию того, что «это» указывает на. Все мои попытки идентифицировать его показывают, что это неотличимо от обычного экземпляра класса переменной. Моя конечная цель - указать экземпляр класса на другой экземпляр, и я пытался определить, могу ли я «это» упростить процесс. Благодаря!Что такое «эта» ссылка в классах as3?

+0

«Наведите экземпляр класса на другой экземпляр» - как именно вы пытаетесь сделать это на C++ путем присвоения 'this'? –

ответ

2

Короткий ответ: Нет. Вы не сможете повторно использовать this, чтобы указать на другой экземпляр того же класса.

Ключевое слово this в AS3 ведет себя так же, как в C#: при использовании внутри класса он всегда ссылается на текущий экземпляр объекта.

public class Cat 
{ 
    var name:String = ""; 

    public function getName():String 
    { 
     return this.name; 
    } 

    public function setName(name:String):void 
    { 
     this.name = name; 
    } 
} 

var joe:Cat = new Cat(); 
joe.setName("Joe"); //joe.getName() will return "Joe" 

var john:Cat = new Cat(); 
john.setName("John"); //john.getName() will return "John" 
2

это ссылка на ИНСТАНУС класса. Это действительно для удобства и ясности больше всего на свете, т. Е. Позволяет легко получить доступ к подсказке кода и явно укажет, какое свойство/метод вы пытаетесь получить. Это зарезервированное слово, поэтому вы не можете использовать его для других целей.

Это может быть очень удобно с помощью методов, которые принимают аргумент, который является тем же имя, как свойство класса, такие как:

package 
{ 
    public class MyClass 
    { 
     private var stuff:String; 

     public function MyClass() 
     { 
     } 

     public function setStuff(stuff:String):void 
     { 
      this.stuff = stuff; 
     } 
    } 
} 

this.stuff относится к свойству экземпляра и прочему относится к аргументу методы который был принят. Без этого у вас была бы двусмысленная ссылка на материал, и компилятор не знал бы, что вы хотите установить свойство класса для аргумента.

package 
{ 
    public class MyClass 
    { 
     private var stuff:String; 

     public function MyClass() 
     { 
     } 

     public function setStuff(stuff:String):void 
     { 
      stuff = stuff; //NO this KEYWORD! 
     } 
    } 
} 

просто установил аргумент для себя, и ничего не произойдет.

Многие считают, что использование этого создает загроможденный уродливый код. Лично я использую его совсем немного, но это вопрос личного вкуса и договоренностей, согласованных вашей командой/проектом.

Вы не можете переназначить это другому классу.

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