js的面对对象编程

来源:互联网 发布:js新建一个数据类型 编辑:程序博客网 时间:2024/05/16 05:58


js是一种支持面向对象编程的脚本语句,

它有继承,封装,多态的特点

基于对象编程和面向对象编程叫法区分

 js 中我们可以认为这个叫法一致

基于对象= =面向对象  类==原型对象


面向对象编程的引入
一个问题?
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。    

还有一只叫小花,今年10岁,花色。请编写一个程序,    

当用户输入小猫的名字时,就显示该猫的名字,年龄,    

 颜色。如果用户输入的小猫名错误,则显示 张老太没    

有这只猫猫。

<html>

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/> 
<script type="text/javascript">  

//定义了一个猫类 

 function Cat(){ }

//创建一只猫 [js对象的属性可以动态增加] 

var cat1=new Cat(); //cat1就是一个对象实例 

cat1.name="小白";  // 

cat1.age=3; 

cat1.color="白色"  

document.write(cat1.name+"--"+cat1.age+"--"+cat1.color);    

//特别说明 

// var cat1=new Cat(); //当做类(原型对象使用) 

// Cat();

//当做函数

</script> 
</html>

对象公开属性的访问方式有

对象名.属性名;

对象名[’属性名’];


js中自定义类(原型对象)的五种方法

工厂方法 
var obj=new Object();

obj.属性=”aa”;
obj.show=function (){ };

通过构造函数来定义类(最多)

function 类名/函数名(){  } 
var p=new 类名/函数名(); //

函数名();

通过prototype 来定义

动态的添加方法和属性.

1. 构造函数 和 prototype混合

2. 动态创建对象模式

js中一起都是对象
基本对象/系统内置对象(Number,String,Boolean..) 
var i=0; 
window.alert(i.constructor);  

function Person(){  }   

var p1=new Person();  

window.alert(p1.constructor);  

window.alert(Person.constructor); 

window.alert(Function.constructor);

可用通过 instanceof 来 判断某个对象实例是不是某个类的对象实例,  案例:
//如何判断一个对象实例是不是某个 类(原型对象)  

if(p1 instanceof Dog)

{  window.alert("p1是Person一个对象实例");  }

else

{   window.alert("p1是Dog一个对象实例");  }


js的对象在内存中是怎样存在?

var a=new Person();

a.age=10;
a.name=“小明”;

 var b=a;


js的对象回收机制!!!
在js中维护一张对象对用表:
GC 如何去判断某个对象是垃圾对象.

当对象的地址被引用的次数,变成0, 则gc 就会认为该对象是垃圾,就会回收.


js中还提供了一种主动销毁对象属性的方法 
基本语法是 
delete 对象名.属性名;  // 不要这样 delete 对象; 
原理可以主动的销毁某个对象的属性  this

提出问题?
我们在编程中,可能需要当我们创建一个对象后,这个对象就自动的有某些属性,怎么? 
可以这样做:
function Person()

{   //下面这句话表示,每创建一个Person实例,实例就会自动有一个属性  

   //name,并且是公开

  this.name="小童";  } 
如果你希望name是创建对象实例的时候指定,可以通过参数传入: 
function Person(name)

{   //下面这句话表示,每创建一个Person实例,实例就会自动有一个属性  

   //name,并且是公开  

   this.name=name;  } 
   使用的时候: 
   $p4=new Person(“顺平”); 
   $p4.name;


深入认识this的含义
//下面的代码讲解私有属性的怎样访问
   function Person()

   {    var name="abc"; //私有的,只能在内部使用   

        var age=900; //私有的,只能在内部使用    

       //感受(相当于你是通过内部函数来访问私有的变量.)   

       //如何理解: 说有一个属性 show 因为前面有this 
       //说明 show属性是公开. 该属性是指向一个函数地址属性.   

       //则通过 show去调用该函数.   

       this.show=function()

       {  window.alert(name+" "+age);  }
   }
  var p1=new Person();
  //window.alert(p1.name+" "+p1.age);//错误 
 
  p1.show(); 
  对this的再认识:

 <html> <head>

<meta http-equiv="content-type" content="text/html;charset=utf-8"/> 
<script type="text/javascript">

//****案例如下****

function test1()

{  alert(this.v);  }
var v=190;
test1(); //输出什么 <==> window.test1();  
window.test1();

</script> </html>


this 只能在类定义的内部使用:
//说明this 只能在 类定义的内部使用
   function Dog()

   {    this.name="小明";   }   

   var dog1=new Dog();    
   window.alert(this.name);

   //报空, 因为这样使用,相当于去访问window对象的name属性,但是你没有写.

 

☞ 补充讲解一个 var 的知识点:(还有说..) 

//表示全局变量 

 var t=90;  

function test(){  t=890;  }

test();  window.alert(t); 
说明: var 变量: 表示该变量是全局的, 如果你其他函数中,使用变量是,

前面没有带 var , 则表示要使用全局变量. 如果你在函数中 使用变量时候,

带了 var 则说明你要使用全新的变量. 






0 0
原创粉丝点击