var ClassTest = function () { var field = 0; this.prop = 0; this.showThis = function () { alert("This:" + field + "," + this.prop); } ClassTest.prototype.changeField = function (value) { field = value; }; ClassTest.prototype.show = function () { alert(field + "," + this.prop); }; }; var c1 = new ClassTest(); c1.changeField(1); c1.prop = 1; var c2 = new ClassTest(); c2.changeField(2); c2.prop = 2; c1.showThis(); // 1,1 c1.show(); // 2,1 c2.showThis(); // 2,2 c2.show(); // 2,2
请看上面的代码和结果,定义了一个field 和一个 property,为什么showThis 和 show的结果会不一致?不都是new了一个新的对象了吗?
你这个写法就不对,自己跟自己过不去
var field = 0;//这个是私有变量
下面的代码写在类里面是不正确,这里用到的field是全局变量而不是ClassTest的私有变量了。也就是说你两次show的根本就不是一个东西。
ClassTest.prototype.show = function () {
alert(field + "," + this.prop); //这里的field是全局变量
};
给ClassTest的原型添加方法的时候是不可能访问到他的私有变量的。
一语点醒梦中人。明白了,非常感谢!