首页 新闻 会员 周边 捐助

js field vs property

0
悬赏园豆:10 [已解决问题] 解决于 2012-05-03 14:36
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了一个新的对象了吗? 

js
用情的主页 用情 | 初学一级 | 园豆:186
提问于:2012-05-03 13:07
< >
分享
最佳答案
1

你这个写法就不对,自己跟自己过不去

var field = 0;//这个是私有变量

下面的代码写在类里面是不正确,这里用到的field是全局变量而不是ClassTest的私有变量了。也就是说你两次show的根本就不是一个东西。
ClassTest.prototype.show = function () {        
  alert(field
+ "," + this.prop); //这里的field是全局变量
};


给ClassTest的原型添加方法的时候是不可能访问到他的私有变量的。
收获园豆:10
写代码的小2B | 老鸟四级 |园豆:4377 | 2012-05-03 13:38

一语点醒梦中人。明白了,非常感谢!

用情 | 园豆:186 (初学一级) | 2012-05-03 14:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册