2016-04-23 8 views
2

Следующий код:Каковы преимущества использования ключевого слова «это»?

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return cody.gender;} 
}; 

такая же, как:

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return this.gender;} 
}; 

Оба кода получения идеальной ту же цель. Единственная разница - это обмен cody с ключевым словом . В чем преимущества использования ключевого слова этого в Javascript? Повышает ли производительность? можем ли мы игнорировать его в ООП?

+0

Ключевое слово 'this' на мой взгляд - полная косметика. Это имеет смысл, хотя и может сделать ваш код более понятным. – Shawn31313

+0

это означает «владелец» атрибута, поэтому this.gender и cody.gender не отличаются друг от друга, кроме того, что они являются разными словами – Li357

+0

http://stackoverflow.com/questions/3889570/what-is-the- разница-между-этим-этим-и-этим – rmondesilva

ответ

1

«это» ключевое слово используется для обозначения текущего исполнения контекст или объект кода в Это полезно, если вы хотите, чтобы определить тип объекта ака класса, например людей:.

var Person = function(name, living, age, gender) { 
    this.name = name; 
    this.living = living; 
    this.age = age; 
    this.gender = gender; 
    this.getGender = function(){return this.gender}; 
}; 

var cody = new Person('Cody', true, 23, 'male'); 
var john = new Person('John', true, 25, 'male'); 

Это позволяет использовать «новый» K eyword для создания нескольких уникальных экземпляров Person со своими собственными значениями. Таким образом, на линии var cody = new Person('Cody', true, 23, 'male'); «это» относится к коди var и на следующей строке относится к john var. В вашем коде «это» относится к вашему коду var, потому что он находится внутри объекта cody, но это не обязательно, потому что вы не создаете новые коды с собственными значениями.

+0

Спасибо Mate, это было кристально чисто. –

+0

* «В вашем коде« это »относится к вашему коду var, потому что он находится внутри объекта cody» * - Нет, это не так. В JS значение 'this' зависит от того, как была вызвана функция, а не там, где определена функция. – nnnnnn

+0

@nnnnnn В своем коде «это» внутри объектного литерала не функция. – LukasGuptaLeary

6

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

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return cody.gender} 
}; 
var codyCopy = cody; 
cody = "foobar"; 
//undefined 
alert(codyCopy.getGender()); 

Однако использование this не будет, потому что это правильно относится к codyCopy:

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return this.gender} 
}; 
var codyCopy = cody; 
cody = "foobar"; 
//male 
alert(codyCopy.getGender()); 
+0

Большое спасибо за помощь. –

+0

'var x = cody.getGender; alert (x()); 'не будет работать. (Если предупреждение «undefined» не считается рабочим.) Значение 'this' зависит от того, как вы вызываете функцию. – nnnnnn

+0

@nnnnnn Да, вот что я делаю. Единственная причина, по которой изменилось определение 'this', - это изменение _context_. В вашем примере вы кэшировали функцию, принадлежащую кодии, тогда как мой пример кэширует всю функцию cody, включая переменную пола. Поэтому, когда мы объявляем, что cody теперь равен foobar, значение 'this' не изменилось, просто значение, указанное ссылкой this.ender, больше не существует. Он не был кэширован рядом с вызовом getGender(). – Zatronium

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