Вы можете заставить это работать естественным образом, как вы ожидали, - используя дисплей, - но вам нужно активировать браузер, чтобы заставить его работать, используя JS или, как другие, предложили фантастический трюк с одним тегом внутри другого. Мне не нужен внутренний тег, поскольку он еще более усложняет CSS и размеры, поэтому вот решение JS:
https://jsfiddle.net/b9chris/hweyecu4/1/
Начиная с поля типа:
Скрытое поле. Вы можете переключиться на клик с помощью:
function toggleTransition() {
var el = $("div.box1");
if (el.length) {
el[0].className = "box";
el.stop().css({maxWidth: 10000}).animate({maxWidth: 10001}, 2000, function() {
el[0].className = "box hidden";
});
} else {
el = $("div.box");
el[0].className = "box";
el.stop().css({maxWidth: 10001}).animate({maxWidth: 10000}, 50, function() {
el[0].className = "box box1";
});
}
return el;
}
someTag.click(toggleTransition);
. CSS - это то, что вы догадались:
.hidden {
display: none;
}
.box {
width: 100px;
height: 100px;
background-color: blue;
color: yellow;
font-size: 18px;
left: 20px;
top: 20px;
position: absolute;
-webkit-transform-origin: 0 50%;
transform-origin: 0 50%;
-webkit-transform: scale(.2);
transform: scale(.2);
-webkit-transition: transform 2s;
transition: transform 2s;
}
.box1{
-webkit-transform: scale(1);
transform: scale(1);
}
Ключ регулирует свойство отображения. Удалив скрытый класс, а затем ожидая 50 мс, , затем , начиная переход через добавленный класс, мы получим его, чтобы он появился, а затем развернулся, как мы хотели, вместо того, чтобы просто накладывать на экран без какой-либо анимации. Аналогично происходит другой путь, за исключением того, что мы ожидаем завершения анимации перед применением скрытых.
Примечание: я злоупотребляю .animate(maxWidth)
здесь, чтобы избежать условий гонки setTimeout
. setTimeout
быстро вводит скрытые ошибки, когда вы или кто-то другой захватывает код, не подозревая об этом. .animate()
можно легко убить с помощью .stop()
. Я просто использую его для установки задержки 50 мс или 2000 мс в стандартной очереди fx, где ее легко найти / разрешить другими конструкторами кодов поверх этого.
Если вы вызываете myObject.method()
, то this
будет ссылаться на myObject
внутри method
.
Быстрый поиск в Google принес этот результат: http://xahlee.org/java-a-day/this.html
В значительной степени ключевым словом «this» является ссылка на текущий объект (сам).
Если переменные экземпляра такие же, как переменные, объявленные в конструкторе, мы используем «this» для назначения данных.
class Example{
int assign;// instance variable
Example(int assign){ // variable inside constructor
this.assign=assign;
}
}
Надеемся, что это поможет.
Я также искал тот же ответ и как-то не мог понять концепцию ясно. Но, наконец, я понял это из этой ссылки
, это ключевое слово в Java. Который может использоваться внутри метода или конструктора класса. Он (это) работает как ссылка на текущий объект, метод которого или конструктор вызывается. это ключевое слово можно использовать для ссылки любого члена текущего объекта из метода экземпляра или конструктора.
Это ключевое слово используется для ссылки на текущую переменную блока, например, рассмотрим приведенный ниже код (просто пример, поэтому не ожидайте стандартного кода JAVA):
Public class test{
test(int a) {
this.a=a;
}
Void print(){
System.out.println(a);
}
Public static void main(String args[]){
test s=new test(2);
s.print();
}
}
Thats it. Выход будет «2». Если мы не использовали это ключевое слово, то выход будет: 0
Он ссылается на экземпляр, по которому этот метод называется
class A {
public boolean is(Object o) {
return o == this;
}
}
A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false
this
является ссылкой на текущий объект: http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html
Чтобы быть полным, this
также можно использовать для ссылки на внешний объект
class Outer {
class Inner {
void foo() {
Outer o = Outer.this;
}
}
}
это может использоваться внутри некоторого метода или конструктора.
Возвращает ссылку на текущий объект.
Переменные экземпляра являются общими для каждого создаваемого вами объекта. скажем, есть две переменные экземпляра
class ExpThisKeyWord{
int x;
int y;
public void setMyInstanceValues(int a, int b) {
x= a;
y=b;
System.out.println("x is ="+x);
System.out.println("y is ="+y);
}
}
class Demo{
public static void main(String[] args){
ExpThisKeyWord obj1 = new ExpThisKeyWord();
ExpThisKeyWord obj2 = new ExpThisKeyWord();
ExpThisKeyWord obj3 = new ExpThisKeyWord();
obj1.setMyInstanceValues(1, 2);
obj2.setMyInstanceValues(11, 22);
obj3.setMyInstanceValues(111, 222);
}
}
, если вы заметили выше код, мы инициировали три объекта, а три объекта вызывают метод SetMyInstanceValues. Как вы думаете, JVM правильно назначает значения для каждого объекта? есть трюк, JVM не увидит этот код, как это показано выше. вместо этого он будет выглядеть так, как показано ниже:
public void setMyInstanceValues(int a, int b) {
this.x= a; //Answer: this keyword denotes the current object that is handled by JVM.
this.y=b;
System.out.println("x is ="+x);
System.out.println("y is ="+y);
}
this
относится к текущему объекту.
Каждый нестатический метод работает в контексте объекта. Итак, если у вас есть такой класс:
public class MyThisTest {
private int a;
public MyThisTest() {
this(42); // calls the other constructor
}
public MyThisTest(int a) {
this.a = a; // assigns the value of the parameter a to the field of the same name
}
public void frobnicate() {
int a = 1;
System.out.println(a); // refers to the local variable a
System.out.println(this.a); // refers to the field a
System.out.println(this); // refers to this entire object
}
public String toString() {
return "MyThisTest a=" + a; // refers to the field a
}
}
Затем вызов frobnicate()
на new MyThisTest()
будет печатать
1 42 MyThisTest a=42
. Так эффективно вы используете его для нескольких вещей:
Это «ссылка на объект в текущем контексте» эффективно. Например, чтобы распечатать «этот объект», вы можете написать:
System.out.println(this);
Обратите внимание, что использование «глобальной переменной» несколько не работает ... если вы используете this.variableName
, то по определению это not глобальная переменная - это переменная, специфичная для этого конкретного экземпляра.
Ниже приводится копия & amp; вставьте из здесь , но очень хорошо объясняет все различные применения ключевого слова this
:
Определение: ключевое слово Java this
используется для ссылки на текущий экземпляр метода на который используется.
Ниже приведены способы использования этого:
private String javaFAQ;
void methodName(String javaFAQ) {
this.javaFAQ = javaFAQ;
}
Здесь это относится к переменной экземпляра. Здесь приоритет высокий для локальной переменной. Поэтому отсутствие this
обозначает локальную переменную. Если локальная переменная, которая является именем параметра, не такая же, как переменная экземпляра, то независимо от this
используется или нет, она обозначает переменную экземпляра. This
используется для ссылки на конструкторы public JavaQuestions(String javapapers) {
this(javapapers, true);
}
. вызывает конструктор того же класса java, который имеет два параметра. This
используется для передачи текущего экземпляра java в качестве параметра obj.itIsMe(this);
CurrentClassName startMethod() {
return this;
}
Примечание. Это может привести к нежелательным результатам, когда они используются во внутренних классах в указанных выше двух точках. Поскольку это будет относиться к внутреннему классу, а не к внешнему экземпляру. This
можно использовать для получения дескриптора текущего класса Class className = this.getClass(); // this methodology is preferable in java
. Хотя это можно сделать с помощью Class className = ABC.class; // here ABC refers to the class name and you need to know that!
Как всегда, this
связан с его экземпляром, и это не будет работать в статических методах.
(я знаю, что я поздно, но я был тайным бои, которого ты никогда не видел)
Это ключевое слово на большинстве объектно-ориентированных языков программирования, если не все означает, что его ссылку на текущий экземпляр объекта этого класса. Это по сути то же самое, что и вызов этого объекта извне метода по имени. Вероятно, это не имело никакого смысла, так что Ill подробно:
Вне класса, чтобы вызвать что-то внутри этого экземпляра объекта, например, сказать, что у вас есть объект, называемый объектом, и вы хотите получить поле вам нужно будет использовать
object.field
Скажите, например, что вы пытаетесь получить доступ к объекту. изнутри вашего класса, например, ваш конструктор, вы можете использовать
this.field
Это ключевое слово существенно заменяет ключевое слово name объекта при вызове внутри класса. Обычно не так много причин делать это за пределами, если у вас есть две переменные с одним и тем же именем, одна из которых является полем класса, а другая просто является переменной внутри метода, она помогает расшифровать между двумя , Например, если у вас есть это: (Hah, получите это? this ? Хе-хе ... только я? Okay :( Я уйду сейчас)
public String Name;
//Constructor for {object} class
public object(String Name){
Name = Name;
}
вызовет некоторые проблемы, компилятор не сможет узнать разницу между переменной Name, определенной в параметрах для конструктора, и переменной Name внутри деклараций полей класса, чтобы вместо этого назначить параметр Name ... значение параметра Name, которое ничего не делает ничего полезного и буквально не имеет цели. Это распространенная проблема, которую делают большинство более новых программ, и я тоже был жертвой. В любом случае правильный способ определения этого параметра должен был бы использовать:
public String Name;
//Constructor for {object} class
public object(String Name){
this.Name = Name;
}
Таким образом, компилятор знает, что переменная Name, которую вы пытаетесь назначить, является частью класса, а не частью метода и назначает его правильно, то есть он присваивает поле Name вы вставляете в конструктор.
Подводя итог, он в основном ссылается на поле экземпляра объекта класса, над которым вы работаете, следовательно, это ключевое слово «это», что означает его этот объект , или этот экземпляр . Его хорошая практика - использовать это при вызове поля своего класса, а не просто использовать имя, чтобы избежать возможных ошибок, которые трудно найти, поскольку компилятор работает прямо над ними.
В Java «это» является предопределенной переменной. Если мы используем «this» в методе, это означает, что мы получаем ссылку (адрес) текущего текущего объекта. Для примера.
this.age ---> возраст текущего текущего объекта.
В Swing довольно распространено писать класс, который реализует ActionListener
и добавляет текущий экземпляр (т. е. «это») в качестве ActionListener для компонентов.
public class MyDialog extends JDialog implements ActionListener
{
public MyDialog()
{
JButton myButton = new JButton("Hello");
myButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
System.out.println("Hurdy Gurdy!");
}
}
Он относится к текущему экземпляру определенного объекта, поэтому вы можете написать что-то вроде
public Object getMe() {
return this;
}
. Обычный прецедент this
- это предотвращение затенения. Возьмем следующий пример:
public class Person {
private final String name;
public Person(String name) {
// how would we initialize the field using parameter?
// we can't do: name = name;
}
}
В приведенном выше примере мы хотим назначить член поля, используя значение параметра. Поскольку они имеют одно и то же имя, нам нужен способ различать поле и параметр. this
позволяет нам обращаться к членам этого экземпляра, включая поле.
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
Объекты имеют методы и атрибуты (переменные), которые производятся от классов, чтобы указать, какие методы и переменные принадлежат определенному объекту, используется зарезервированное слово this
. в случае переменных экземпляра важно понять разницу между неявными и явными параметрами. Взгляните на вызов fillTank
для объекта audi
.
Car audi= new Car();
audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter
Значение в скобках является неявным параметром, а сам объект является явным параметром, методы, которые не имеют явные параметры, используют неявные параметры, метод fillTank
имеет как явный, так и неявный параметр.
Давайте подробнее рассмотрим метод fillTank
в классе Car
public class Car()
{
private double tank;
public Car()
{
tank = 0;
}
public void fillTank(double gallons)
{
tank = tank + gallons;
}
}
. В этом классе мы имеем переменную экземпляра «tank». Может быть много объектов, которые используют переменную экземпляра резервуара, чтобы указать, что переменная экземпляра «tank» используется для определенного объекта, в нашем случае объект «audi», который мы создали ранее, мы используем ключевое слово this
reserved , например, переменные, использование «этого» в методе указывает, что переменная экземпляра в нашем случае «tank» является переменной экземпляра неявного параметра.
Компилятор java автоматически добавляет this
зарезервированный слово, поэтому вам не нужно добавлять его, это вопрос предпочтения. Вы не можете использовать this
без точки (.), Потому что это правила java (синтаксис).
В заключение.
this
для переменной экземпляра в методе указывает, что переменная экземпляра принадлежит неявному параметру или что она является переменной экземпляра неявного параметра. this
не может использоваться без точки (.), это синтаксически недействительно this
также может использоваться для различения локальных переменных и глобальных переменных, имеющих одно и то же имя this
также применяется к методам, чтобы указать, что метод принадлежит определенному объекту.