<script type="text/javascript">
// crearea unui obiect myObject: contine o variabila value si o functie increment
var myObject = {
value: 0,
increment: function (inc) {
this.value += typeof inc === 'number' ? inc : 1;
}
};
myObject.increment();
console.log(myObject.value); // 1
myObject.increment(2);
console.log(myObject.value); // 3
// adaugarea unei noi functii obiectului nostru numita double
myObject.double = function () {
// functia nu e buna
var wrongHelper = function () {
this.value = this.value + this.value;
};
wrongHelper();
// functia este buna
var rightHelper = function () {
myObject.value = myObject.value + myObject.value;
};
rightHelper();
};
// Invoke double as a method.
myObject.double();
console.log(myObject.value); // 3
</script>
Prima metodă din double (wrongHelper) este greșită deoarece this.value nu este definit. Mai precis this nu referă obiectul curent reprezentat de myObject, ci se află într-o funcție care la rândul ei este într-o funcție și contextul este reprezentat de acea funcție care o conține. Pentru a rezolva acest lucru, în rightHelper am înlocuit this cu myObject.
// crearea unui obiect myObject: contine o variabila value si o functie increment
var myObject = {
value: 0,
increment: function (inc) {
this.value += typeof inc === 'number' ? inc : 1;
}
};
myObject.increment();
console.log(myObject.value); // 1
myObject.increment(2);
console.log(myObject.value); // 3
// adaugarea unei noi functii obiectului nostru numita double
myObject.double = function () {
// functia nu e buna
var wrongHelper = function () {
this.value = this.value + this.value;
};
wrongHelper();
// functia este buna
var rightHelper = function () {
myObject.value = myObject.value + myObject.value;
};
rightHelper();
};
// Invoke double as a method.
myObject.double();
console.log(myObject.value); // 3
</script>
Prima metodă din double (wrongHelper) este greșită deoarece this.value nu este definit. Mai precis this nu referă obiectul curent reprezentat de myObject, ci se află într-o funcție care la rândul ei este într-o funcție și contextul este reprezentat de acea funcție care o conține. Pentru a rezolva acest lucru, în rightHelper am înlocuit this cu myObject.
Niciun comentariu:
Trimiteți un comentariu