我以为我已经理解了闭包的概念,但是下面的代码对我来说表现得令人惊讶:
function A(x)
{
this.getX1 = function () { return x; }
A.prototype.getX2 = function () { return x; }
}
var a1 = new A(1);
var a2 = new A(2);
console.log ('a1.getX1()=%d', a1.getX1 ()); // 1
console.log ('a2.getX1()=%d', a2.getX1 ()); // 2
console.log ('a1.getX2()=%d', a1.getX2 ()); // 2 ???
console.log ('a2.getX2()=%d', a2.getX2 ()); // 2
我可以理解原型方法的行为是否与实例方法不同,但这看起来 x 已成为静态变量。更改调用顺序不会改变结果。