#javascript #oop #object #this #code-snippets
#javascript #ооп #объект #это #фрагменты кода
Вопрос:
var someObject = {
someArray : new Array(),
someInt : 0,
Total: function(){
this.someInt = 0;//we used "this" keyword here, why?Cant we just say "someInt = 0"?
for(var i=0;i<this.someArray.length;i ){//and here..
var c = this.someArray[i];//again we use "this"
this.someInt = c.value;//also here
}
итак, почему мы использовали ключевое слово «this»? мы не можем просто ввести имя переменной?
Комментарии:
1. someInt был объявлен ранее, но да, someInt, вероятно, можно было бы использовать как /var (также, указав, что this.someInt не имеет никакого эффекта в этом конкретном фрагменте, поэтому его можно удалить полностью)
Ответ №1:
this
Ключевое слово относится к объекту, от имени которого вызов выполняется позже, т.Е. Если вы вызываете функцию следующим образом:
someObject.Total()
затем this
будет ссылаться на someObject
внутри функции. Благодаря this
ключевому слову функция может изменять someInt
и считывать, из someArray
которых являются членами someObject
. Если вы удалились this
из тела функции, все эти ссылки будут относиться к глобальным переменным или переменным, локальным для тела функции.
Ответ №2:
Нет, оператор someInt = 0
не изменит someInt
свойство someObject
. Вместо этого он изменит свойство, указанное someInt
в глобальном объекте / объекте по умолчанию ( window
в браузере), которое, очевидно, не нужно вам.
Обратите внимание, что (в зависимости от того, как вы собираетесь вызывать Total
функцию) вы также можете записать это как someObject.someInt
. Однако при вызове функции, подобной этой:
someObject.Total()
…значение this
в функции равно someObject
.
Ответ №3:
Нет, потому что переменная создана не полностью. Используя ключевое слово «this», вы можете получить доступ к переменной из нее самой.
Ответ №4:
Мне кажется, что это просто для ясности. Вероятно, всегда использовать this.
— это хорошая практика, когда вы не используете специальные соглашения об именовании, например, для переменных или локальных переменных (в других языках, а не только в javascript).
Даже если в этом случае это может и не потребоваться, если у вас была функция большего размера с большим количеством локальных переменных и переменных экземпляра, это делает вещи намного понятнее, когда вы различаете.
Комментарии:
1. Чтобы ответить на другой вопрос: нет, мы не можем «просто ввести имя переменной», потому что тогда переменная будет определена не как свойство
someObject
, а как локальная (если используетсяvar
) или глобальная переменная.2. Верно, это не «просто для ясности».
3. Да, я говорил слишком рано —
this
в этом случае требуется — я думаю на C # / Java, где что-то подобное было бы скорее предпочтением / удобочитаемостью.4. Не стесняйтесь отклонять мой ответ — теперь я чувствую себя виноватым за то, что понял это неправильно и получил положительные отзывы.
Ответ №5:
Фактически, Дуглас Крокфорд в своем Javascript The Good Parts
предлагает не использовать это ключевое слово в коде, поскольку функции из объекта могут быть применены к другим объектам, и это может привести к ошибкам. поэтому иногда лучше использовать только имена переменных.
Комментарии:
1. не лучше ли просто использовать имена переменных. Дуглас Крокфорд говорит, что нужно присвоить «this» «that» и использовать «that» вместо «this». Таким образом, когда метод вызывается из контекста другого объекта, «это» будет ссылаться на исходный контекст, а не на вызывающий. Я надеюсь, что это имеет смысл
Ответ №6:
someInt
определяется как свойство someObject
. Его нужно было бы определить как переменную, чтобы получить к нему доступ таким образом.