js-面向对象

来源:互联网 发布:淘宝食品特种经营认证 编辑:程序博客网 时间:2024/06/14 19:21

     在学习过程中我们需要用到js的面向对象的编程,所以需要从头学起,整理一些js中面向对象的资料

     Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,记录以下一些方法:

一、直接定义

我们把猫看成一个对象,他有名字和年龄两个属性

Js代码  收藏代码
  1. var Cat = {  
  2.     name = '';  
  3.     color = '' ;  
  4. }  

 下面生成两个对象

Js代码  收藏代码
  1. var cat1 = {}; // 创建一个空对象  
  2.     cat1.name = "大毛"// 按照原型对象的属性赋值  
  3.     cat1.coler = '黄色';  
  4. var cat2 = {};  
  5.     cat2.name = "二毛";  
  6.     cat2.color = '红色';  

 二、构造函数模式

       为了解决从原型对象生成实例的问题,js提供了一个构造函数(constructor)模式。所谓构造函数就是一个普通函数,但是内部使用this,对构造符使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

那么猫的原型对象就可以写成:

Js代码  收藏代码
  1. function Cat(name,color){  
  2.     this.name=name;  
  3.     this.color=color;  
  4.   }  

 猫的实例对象就是

Js代码  收藏代码
  1. var cat1 = new Cat("大毛","黄色");  
  2. var cat2 = new Cat("二毛","黑色");  
  3. alert(cat1.name); // 大毛  
  4. alert(cat1.color); // 黄色  

 三、Prototype模式

       js中规定每个构造函数都有一个prototype属性,只想另一个对象。这个对象的所有属性和方法,都会被狗仔函数的实例继承这意味着,我们可以把那些不变的属性和方法直接定义在prototype对象上。

猫的原型对象就可以这样

Js代码  收藏代码
  1. function Cat(name,color){  
  2.     this.name = name;  
  3.     this.color = color;  
  4.   }  
  5.   Cat.prototype.type = "猫科动物";  
  6.   Cat.prototype.eat = function(){alert("吃老鼠")};  

生成实例

Js代码  收藏代码
  1. var cat1 = new Cat("大毛","黄色");  
  2.   var cat2 = new Cat("二毛","黑色");  
  3.   alert(cat1.type); // 猫科动物  
  4.   cat1.eat(); // 吃老鼠  

1  js中一个函数就是一个类,可以将它理解为类的构造函数,负责初始化工作。

2  可以通过new的操作符获得一个类的实例。

         例如:

//定义一个hello函数
function hello(){
      alert("hello");
}
//通过new一个函数获得一个对象
var obj=new hello();
alert(typeof(obj));

3 对象的属性和方法

         其他语言中,对象一旦生成,就不可更改,要为一个对象添加、修改成员必须要在对应的类中修改,并重新实例化,程序也必须重新编译。JavaScript提供了灵活的机制来修改对象的行为,可以动态添加、修改、删除属性和方法。例如:先用类Object来创建一个空对象user:

var user=new Object();

(1)      获取属性或方法

        a)        对象名.属性(方法)名

        b)        对象名["属性(方法)名"]

(2)      添加属性

       a)        添加属性:

user.name="jack";

user.age=21;

user.sex="male";

       b)        添加方法

user.alert=function(){

alert("myname is:"+this.name);

}

(3)      修改属性和方法

修改一个属性和方法的过程就是用新的属性替换旧的属性,例如:

user.name="tom";

user.alert=function(){

     alert("hello,"+this.name);

}

(4)      删除属性和方法

删除一个属性和方法的过程也很简单,就是将其置为undefined:

user.name=undefined;

user.alert=undefined;

这样就删除了name属性和alert方法。

4 无类型对象

         传统的面向对象语言中,每个对象都会对应到一个类。上一节讲this指针时提到,JavaScript中的对象其实就是属性(方法)的一个集合,并没有严格意义上类的概念。所以它提供了一种简单的方式来创建对象,即大括号({})语法:

{

     property1:statement,

     property2:statement2,

     …,

     propertyN:statmentN

}

通过大括号括住多个属性或方法及其定义(这些属性或方法用逗号隔开),来实现对象的定义,这段代码就直接定义个了具有n个属性或方法的对象,其中属性名和其定义之间用冒号(:)隔开。

 

5 prototype原型对象

prototype 对象是实现面向对象的一个重要机制。每个函数(function)其实也是一个对象,它们对应的类是“Function”,但它们身份特殊,每个函数对象都具有一个子对象prototype。即prototype表示了该函数的原型,而函数也是类,prototype就是表示了一个类的成员的集合。当通过 new来获取一个类的对象时,prototype对象的成员都会成为实例化对象的成员。


0 0