2016-11-05 70 views
0

下面的代码执行一个无限循环(打印getter1一次,然后getter2,直到停止):由于两个getter造成的无限循环?

var person1 = { 
    _age: 42, 
    get age() { 
     console.log("getter1"); 
     return this._age; 
    } 
}; 

Object.defineProperty(person1, "_age", { 
    get: function() { 
     console.log("getter2"); 
     return this._age; 
    } 
}); 
console.log(person1.age); // true 

什么原因呢? (注意:我知道我宣布了两个不同的获得者)。

+2

第二吸气获取自身... – adeneo

回答

1

这不是一个无限循环,而是无限递归。您在_age的吸气器内返回this._age,但访问this._age会再次隐式调用getter。

请注意,一旦您定义了一个名为_age的获取器,旧的值_age(42)将被覆盖。没有财产价值42了。如果你想创建一个返回属性的值,它不能是同一个属性的getter一个getter,故名比_age等你消气了一句:

var person1 = { 
    _age: 42, 
    get age() { 
     console.log("getter1"); 
     return this._age; 
    } 
}; 

Object.defineProperty(person1, "age2", { 
    get: function() { 
     console.log("getter2"); 
     return this._age; 
    } 
}); 
console.log(person1.age); // 42 
console.log(person1.age2); // 42 
0

每次你从一个getter返回一个值,你火了其它吸气

0

你的第一吸气是要求this._get这触发第二getter方法,询问this._get触发第二getter方法,询问this._get,这触发了......你明白了。