日期:2014-05-16  浏览次数:20321 次

js面向对象编程问题,关于私有共有成员
之前我是这样定义一个对象的:

JScript code

            function Man(name,age) {
                //公有字段
                this.Name = name;
                //私有字段
                var age;
                //私有方法
                function show() {
                    alert(gm.Name + " is " + age + " years old");
                }
                //公有方法
                this.Show = function () {
                    show();
                };
                var gm = this;
            }
            var m = new Man('jack', 10);
            m.Show();



后来听说,每创建一个对象它都会创建独立的成员,如果是字段还行,但是方法的话就没必要

于是,查了下资料,有函数原型这个概念,并可以用混合构造函数/函数原型的方式定义一个对象,于是修改后:

JScript code
function Man(name, age) {
                //公有字段
                this.Name = name;
                //私有字段
                var age;
            }
            //本来是私有方法
            Man.prototype.show = function () {
                alert(this.Name + " is " + age + " years old");
            }
            //公有方法
            Man.prototype.Show = function () {
                this.show();
            };

   

引发的问题是,外部定义的方法都是公有,而且不能访问私有字段age

难道js对象不能定义私有的成员???




------解决方案--------------------
构造函数里面定义的局部变量就是私有成员
比如Man函数中的age

你这儿出现undefind不是因为不能访问age,是因为age变量没有赋值
js里面没有赋值的变量值就是undefind,所以给个初值就有了
------解决方案--------------------
还是没有看明白protype属性啊,那不是私有的,认真学学js基础知识吧
http://blog.csdn.net/ismycxp/article/details/5714291