WEB开发网
开发学院网页设计JavaScript 面向对象的编程思想在javascript中的运用(上) 阅读

面向对象的编程思想在javascript中的运用(上)

 2009-11-26 00:00:00 来源:WEB开发网   
核心提示: 这里,我们用一个成员_initialized来指示是否已经对方法进行了内存空间的分配,面向对象的编程思想在javascript中的运用(上)(4),当第一个对象构造的时候_initialized未被定义,所以我们的判断语句为真,改动之后的代码如下:functionPerson(name,sex,

这里,我们用一个成员_initialized来指示是否已经对方法进行了内存空间的分配。当第一个对象构造的时候_initialized未被定义,所以我们的判断语句为真,这时会对方法进行了定义并分配内存空间,然后把_initialized的值设置为true,用以表明方法的内存空间已经分配了。第二个对象构造的时候则不会再进入判断,因而也不会再一次分配内存空间。似乎没什么问题,运行一下看看,张三的信息依然正常显示。虽然不辛苦,不过解决了一个小问题,还是庆祝下吧,来盘回锅肉,我要大快朵颐。还没开吃,一个叫李四的MM也想让电脑弹出她的个人信息。OK,很简单,再构造一个对象,然后调用 showInfo方法就可以了:

var lisi = new Person("李四", "女", 28);
lisi.showInfo();

为了照顾MM,还把这段放在了张三的前边。MM的信息正确显示出来了,可是张三的资料不见了。这下张三不乐意了,排名放在MM后边也罢了,但好歹得有名字啊。这可苦了我这编程人员,回锅肉看来没办法吃了,先改bug吧。打开firebug,看到MM的信息显示之后出现错误,提示为:zhangsan.showInfo is not a function。设置断点看看,构造zhangsi对象以后发现并没有showInfo这个方法。原来showInfo方法虽然只有一个,但是存在于第一个对象之中,第二个对象并不能访问。那么,究竟如何才能让同一个构造函数产生的对象共用同一个函数呢?javascript中的prototype给我们提供了这个功能。根据javascript的规范中描述,每一个构造函数都有一个prototype属性用于实现继承和属性的共享。我们的 showInfo方法也可以看作是一个属性,该属性指向一个函数的引用。现在我们使用prototype来使得我们的方法可以共享,代码的改动很简单,把 this.showInfo改成Person.prototype.showInfo就可以了,改动之后的代码如下:

function Person(name, sex, age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
            if (typeof Person._initialized == "undefined") {
                Person.prototype.showInfo = function() {
                    alert("姓名:" + this.name + " 性别:" + this.sex + " 年龄:" + this.age);
                }
                Person._initialized = true;
            }
        }

  使用该构造函数生成两个对象:

var lisi = new Person("李四", "女", 28);
lisi.showInfo();
var zhangsan = new Person("张三", "男", 18);
zhangsan.showInfo();  

运行之后先显示李四的信息,然后是张三的信息。现在两个人都满意了,可惜我的回锅肉已经凉了

编缉推荐阅读以下文章

  • 暂无相关文章

上一页  1 2 3 4 

Tags:面向 对象 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接