一、定义和实例化一个类:
在OOP的思想中,类是一个很重要的元素,一个类表示了具有相似的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,我们也可以称之为对象。
在javascript中,我们定义一个函数,也可以看着是类,
1 function class(){ 2 code;//类成员的定义以及构造函数 3 }
上面class我们可以将他看着为类的构造函数,来实现初始化工作。
JS中暂时没有CLASS这个类的关键字,所以我们暂时使用function来实现类的定义.
类在定义好之后,如果没有定义静态方法时,我们是不能直接使用的,我们需要先实例化一个类,当然,JS也不例外的使用NEW这个关键字来实现对类的实例化。
接上面的代码 var obj = new class();
我们可以这么简单的理解,在javascript中,现阶段函数和类是就是一个概念,当对一个函数进行nwe操作是,就返回一个对象,如果函数中没有初始化类成员,就会返回一个空对象。当 new一个函数是,这个函数就锁有代表类的构造函数,其中的代码被看做初始化了一个对象。用于表示类的函数我们也称之为构造器。
二、引用对象的属性和方法
在JAVASCRIPT中,每个对象可以看做是多个属性(方法)的集合,引用一个属性(方法)一般采用 对象名.属性(方法)名 或 对象名["属性(方法)名"]
例如:
var arr = new Array(); //定义一个数组 arr.push('xiaozu'); //为数组增加一个元素 arr["push"]("zhangsn"); //使用[]引用对象的属性和方法 var $length = arr.length; //获取数组长度 var $len = arr["length"]; //获取数组长度 document.write($length+"<br>"); document.write($len);
三、动态添加、修改、删除对象的属性和方法
上一节,我们已经了解如何引用一个对象的属性和方法,现在我们来了解如何为一个对象添加、修改或则删除属性和方法。Javascript提供了灵活的机制来修改对象行为,可以动态添加、修改、删除属性和方法
例如,我们先用类Object来创建一个空对象user:
添加属性和方法:
var user = new Object(); //创建一个空对象user user.name = 'xiaozu'; //添加属性 user.age = '18'; user.sex = 'male'; document.write(user.name+"<br />"); //输出这三个语句 document.write(user.age+"<br />"); document.write(user.sex+"<br />"); user.getName =function(){ //添加一个方法 document.write("My name is:"+this.name+"<br/>"); } user.getName(); //调用这个方法
修改属性和方法:
修改一个属性和方法的过程就是用新的属性替换旧的属性
删除属性和方法:
删除一个属性和方法就是讲其设置为undefined:
user.name = undefined;
user.alert = undefined;
也可以使用 delete user.name 来删除一个属性
四、 创建无类型对象
JavaScript中的对象其实就是属性(方法)的一个集合,并没有严格意义上的类的概念。它提供了一众简单的方式来创建对象,通过使用大括号括住多个属性或方法及其定义,这些属性或方法用逗号隔开,用以实现对象的定义。这段代码就直接定义了具有N个属性或方法的对象,其中属性名和其定义之间用冒号(:)隔开。
<script> var $obj = {}; //定义个空对象 var $user={ $name:"xiaozu", //定义了name属性,初始化为xiaozu $sex:"male", //定义了sex属性,初始化为male hello:function(){ //定义hello方法 document.write("hello,"+this.$name); } } $user.hello(); </script>
五、prototype原型对象,是实现面向对象的一个重要机制,每个函数(function)其实也是一个对象,他们对应的类是“Function”,每个函数对象都具有一个子对象prototype。即prototype表示该函数的原型,而函数也是类,prototype就是表示了一个类的成员的集合。当通过new来获取一个类的对象时,prototype对象的成员都会成为实例化对象的成员。
function $class1(){ //empty } $class1.prototype.method=function(){ //对类的prototype对象进行修改,增加method方法 alert("it is a test method"); } var $obj1 = new $class1(); //创建类$class1的实例 $obj1.method(); //调用$ogj1的方法method