WEB开发网
开发学院网页设计JavaScript JavaScript OOP(2)定义JavaScript类 阅读

JavaScript OOP(2)定义JavaScript类

 2010-09-14 13:42:35 来源:WEB开发网   
核心提示: 在上例的代码中,首先定义了1个无参的构造函数,JavaScript OOP(2)定义JavaScript类(3),然后,通过Student类的prototype添加属性和各种方法,它们的Likes属性都仅仅是指向1个数组的引用指针,当数组本身发生变化时,当通过构造函数实例化对象时,所有对象

在上例的代码中,首先定义了1个无参的构造函数。然后,通过Student类的prototype添加属性和各种方法。当通过构造函数实例化对象时,所有对象中放入的都是指向属性和方法的指针。通过原型方式,实现了类中属性和方法的共享。

但是原型方式真的就完美无缺了吗?首先,原型方式定义的类没有带参构造函数,实例化对象后需要一一对对象的属性赋值。其次,所有的对象中包含的都是对属性的引用,这意味着所有对象的属性都是对象公有的。当更改任何对象的1个属性时,都会影响其他对象的属性。以下的代码展现了原型方式的缺陷:

function Student()
{
//这里可以看做是Student的构造函数
}
Student.prototype.Id="1";
Student.prototype.Name="Hongbo";
Student.prototype.Skill="Ajax";
Student.prototype.Likes=new Array("编码","游戏");
Student.prototype.ShowSkill=function()
{
alert(this.Skill);
}
var stu1=new Student();
var stu2=new Student();
stu2.Likes.push("旅行");
alert(stu1.Likes); <!--注意这个消息框中的信息-->
alert(stu2.Likes); <!--注意这个消息框中的信息-->

上例运行的效果如图5.4所示:

JavaScript OOP(2)定义JavaScript类

图5.4 原型方式的缺陷

读者一定会被运行上例的代码的结果惊呆了!读者一定看到了两个相同的消息框,而在代码中实际仅仅更改了stu2的Likes属性,实际上stu1的Likes属性也受到了更改。导致这个结果的原因很简单,stu1和stu2实例化时,它们的Likes属性都仅仅是指向1个数组的引用指针,当数组本身发生变化时,所有指向该数组的指针都会得到修改后的数组。

上一页  1 2 3 4 5  下一页

Tags:JavaScript OOP 定义

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