07 aprilie 2012

Functii in javascript

<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.

Niciun comentariu: