Это пример моего сомнения, из-за которое помещать ему "this" сначала вместо того, чтобы только помещать его "wheels = 4" или "seats = 1", и т.д.: Чем мне может служить это в момент программирования?
var Car = function() {
this.wheels = 4;
this.seats = 1;
this.engines = 1;
};
В JavaScript this
оно функционирует немного различно, что в ней mayorГ - в языков, ориентируемых на объекты.
, Когда используется this
в одной funciГіn, что не назван из-за ningГєn объект, равняется глобальному объекту window
.
function hacerAlgo() {
console.log(this); // window
}
, Когда мы используем this
внутри одной funciГіn, что существует внутри одной clase
или objeto
, он ссылается на clase
или сами objeto
.
function Persona() {
this.edad = 22; // this = Persona
}
var Persona = {
calcAge: function() {
console.log(this); // this = Persona
}
}
ВїPor quГ© помещать его "this" сначала вместо того, чтобы только помещать его "wheels = 4" или "seats = 1"?
Это cuestiГіn diseГ±o. В JavaScript требуют , чтобы использовать this в классах, чтобы обозначать, что вышеупомянутая переменная - собственность из класса. Если ты не используешь this
, изменчивое счастье складируй в глобальном scope .
Исправьте меня, если я ошибаюсь:
Я буду обобщать относительно ключевого слова this
так как она использована несколькими языками программирования, чтобы ссылаться на "scope" или область элемента, который используется.
Представь, что у нас есть следующий код:
class Miclase
{
private int X;
public void SetX(int X)
{
this.X = X;
}
}
Существуют языки программирования, главный подход которых идет к локальным переменным, перед любой другой вещью, я отношусь, если в коде SetX(X)
клалось следующее:
X = X;
Составитель не узнал бы, что делать, говоря ему "распредели ему стоимость параметра X в параметр X". Из-за которого this
он ссылается на объект, который всегда мог бы присутствовать в течение всей инстанции.
Сделав this.X = X
я говорю составителю, чтобы он распределил стоимость моего parametron X
в частной переменной X
что существует в моем классе.
Равный изюм с любым элементом, использовав слово this
ты определяешь, что элемент, в который ты хочешь позвонить, состоит в том, что он считает уровень первенства больше "низким" из-за такого, называть это.
Где было бы возможно определять уровни первенства как:
Variables/Funciones Locales (Prioridad 1)
Variables/Funciones Globales (Prioridad 0)
Равный изюм с функциями, представь, что в Системе существует так называемая функция Restar()
и у тебя есть элемент, определенный с тем же именем внутри класса или любого другого объекта:
funcion Restar()
{
// Implementacion ...
}
По умолчанию на любом языке программирования, этом элементе, принадлежи классу или объекту большей категории, из-за которого, если мы звоним из той же инстанции в Restar()
, у функции Системы будет больше важности, чем у той, которую ты определил.
funcion Main()
{
Restar(); // Llama a la función del Sistema.
this.Restar();
// ^ Llama a tu definición siempre que se encuentre dentro de la misma clase
}
В последнем месте, ключевом слове this
функционируй как "указатель" (Если так возможно звонить ему) в настоящую инстанцию объекта, а следовательно все предыдущее упомянутый, оно может функционировать.
Как другие ответы говорят, ключевое слово (keyword) this
он используется в нескольких языках. Типично в языках, ориентируемых на объект с классами (C ++ и Java в особенности). В этих языках, this
это ссылка на "этот объект", и служит для того, чтобы определить, какой scope мы передаем, использовав имя переменной (или поле или свойство). В Javascript он похожий, но немного более разнообразный и сложный.
В первом приближении: this
он будет внутри функции, которая составляет часть объекта; когда мы призываем функцию используя этот объект, тогда this
он снабдит ссылками этот объект. Пример:
var persona = {
edad : 25,
esMayor : function() {
console.log("evaluando esMayor() , this=" + this + " edad=" + this.edad);
return this.edad >= 18;
}
}
console.log(persona.esMayor());
persona.edad = 17;
console.log(persona.esMayor());
Если предыдущее оказывается ясным, нужно замечать пару вещей (прежде всего для тех, которые мы приходим из OOP с классами). Сначала: ощущаться, что мы не объявили ничего, что было бы похоже на класс, "является лично", а объект; против внешнего вида, давайте не обрежем (по крайней мере не легко) создавать несколько инстанций этого "человека". Секунда: мы могли бы осведомляться: "Действительно ссылка this
она решена во время выполнения? в самом деле, здесь, this
всегда будешь соответствовать в persona
, нет?" Не, не обязательно. Пример:
var perro = { edad : 10, esViejo : persona.esMayor } ;
console.log("perro:" + perro.esViejo());
(Это важно, чтобы доводить до сведения, что то, что он импортирует, является объектом, который используется, чтобы призывать функцию, не объект, где "объявлена" функция.)
Итак, есть другая сцена незначительно отлично, специально и важно (в самом деле, он соответствует примеру вопроса). Есть в Javascript очень особенный тип функций, строители (язык, к сожалению, не дифференцирует их на синтаксическом уровне - в principo, любая функция может быть использованной, как строительный - в самом деле, это обычно не быть так - соглашение состоит в том, чтобы использовать mayúsuculas в имени).
var Car = function() { // esto es (casi seguramente) un constructor
this.wheels = 4;
this.seats = 1;
};
"Нормальное" использование строителя - с ключевым словом new
, что позволяет instanciar несколько объектов (не основываясь на "классе", а на строителе, который определяет прототип)
var car1 = new Car();
var car2 = new Car();
То, что происходит с призывом строителя с new
... важно понимать это, но значимым здесь является поведение this
: в этом случае, Javascript первом верьте в новый объект и потом назови строителя используя этот объект. Тогда, this
, в этом контексте, укажи на новый созданный объект.
В конце концов: что происходит, если он используется this
в глобальном контексте, (вне функции, или в функции, которая не названа как свойство объекта)? В таком случае, this
укажи на "глобальный объект" (window
). Странно, что один заинтересован в этом.
Для большего количества деталей, сходного вопроса в SO (английском языке)
Persona
- немного эксперт и # 237; как класс, и что bindingthis
остается определенным в пользу синтаксиса (а именно, он решен во времени compilaci и # 243; n). Это не эксперт и # 237;. – leonbloy 25.06.2016, 16:58