日常js之-对象

来源:岁月联盟 编辑:exp 时间:2012-02-29

本文并不是javascript教程或是说教类文章,纯粹是个人记录自己工作中使用js的一些心得。
 
    在《javascript权威指南》中说到,js中一切皆为对象。那我们总结下 一共有哪些对象,并且都要怎么定义他们,怎么使用他们,怎么扩展他们。
 
1. 定义对象
    首先我们需要知道,我们要怎么定义他们。
  
   1.1    现在最火的json对象:用在方便同ajax交互下. 
       var json = {"name":"hc","sex":"1"};
       //使用www.2cto.com
       alert(json.name+" "+json.sex); 
     为什么json会这么火呢?因为在我没有接触json前.通过ajax返回数据,解析文本串,是通过”|”来的. 例如:  
       var strResult = ajax.responseText;
     //ajax.responseTex为假设存放ajax返回文本.  1|id=’fffff’|name=’ccc’   如果我要获取name  我就需要   var attr = strResult.split(‘|' )[2];   这样既不直观也不面向对象。所以 当我接触了json后。一下就替换到字符串分割的这种做法了.    
 
同时顺带说题外话,json字符串格式要求也比较松散 .上面的 var json={“name”} 的 name,可以使用双引号,单引号,甚至不用引号都可以。但是如果你使用jQuery等外带框架来进行解析的时候,则必须带上双引号。如果你使用最松散的方式来解析的话 var json = eval("(“+str+”)”);//这样要求最小,但是容易被注入
   1.2   最原生的对象 :  object
 
var obj  = new Object();
//等价的json申明方式就是 
var obj = {}; 
//所以在各大js框架中,基本上看不到new Object()这种写法,都是 obj = {}的写法;简单明了
 
1.3   最像类的对象: function
 function User(name,sex){
     //这样是申明类的属性
 
     this.name=name;
 
     this.sex = sex;
   
     //这样是申明类的公共方法
    this.getMyFullName=function(){
     return _firstname+this.name;
     }
     
    //这个是定义类的私有变量
    var _name= name;
    var _firstname="黄";    
   
    //这个是定义类的私有方法
    function getSex(){
    }
 }
定义好一个类,接下来就是实例他的。和C#一样,通过new 类来实例化他
var my = new User("hc","1");
alert(my.name);
alert(my.getMyFullName());
  
2.扩展对象
 在各个js框架中基本都是这么几种方式来定义对象。我们知道怎么定义对象后。就需要知道怎么扩展他们。
 
 要扩展对象,无非分为2种 ,一种是扩展整个类,一种就是只扩展某个类的实例化
  
 
 2.1 prototype 属性
    
   prototype 属性就是javascript用来满足我们扩展整个类 这个需求而产生的。
   prototype 定义是 该属性指向当前对象所指向的原型。
   光说定义和概念肯定不好理解,打个比方。如果你有需求想要在所有字符串或者数组上加一个方法,你要找谁?
微软才不会给你加个方法。所以这时候 prototype派上用场了.
 String.prototype.getTempMethod = function () {
            return "hc";
}
var str = "c";
alert(str.getTempMethod());//这样在string中你就拥有的你自己的专属方法
  
 2.2 私有扩展
 
如果你只想你当前对象扩展一个方法,那么非常的简单,因为在js中所有方法,字段都是属性。即使是不存在属性方法也可以直接使用
只是它的值为undefined
     
//这时候alert的方法是undefined
var obj = {};
//这时候就在这个对象上定义了一个alert方法了
obj.alert = function(){{
}

 摘自 ksh.xy