读书人

js面向对象编程有关问题关于私有共有

发布时间: 2012-03-09 21:42:55 作者: rapoo

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

读书人网 >JavaScript

热点推荐