在下面这个演示中两个对象共享被闭包了的变量t,和_this 本意是想用这个变量来模拟在基于类的面向对象语言中的类的私有成员变量,所以当调用a1.test()方法来输出_this.v的值时这里的_this并不我们所期望的a1对象,它在a2对象被改变了,所以此时_this指向的是我们后创建对象a2的引用。
在使用javascript库的同时关注真实实现细节,在代码的调试时能让我们更快的找到问题所在。
(function(){ var t = 0; var _this; function Adder(x){ _this = this; _this.v = x; t = t + (+x); } Adder.prototype.test = function (){ alert(t) }; Adder.prototype.test2 = function (){ alert(_this.v); }; window.Adder = Adder; })(); var a1= new Adder(5); a1.test();//output:5 var a2 = new Adder(1); a2.test();//output:6 a1.test2();//output:1