js系列-1 js对象相关

1Js简单数据类型包括数字,字符串,布尔值(有方法,貌似对象,但它们是不可变的),nullundefined,其它所有的值 都是对象。对象是可变的键值集合。

2,字面量:var stooge={key : value},js中每个对象都连接到一个原型对象。所有通过对象字面量创建的对象都连接到Object.prototype.(在chrome中可通过.__proto__测试)

3,检索对象:点与[][]key为变量或关键字时可替代点使用。

4,对象的原型链:只有在对象检索值才被用到。在js对象中检索某个值,没有则顺着原型链找,一直找到Object.prototype,如果还找不到返回undefined

hasOwnProperty方法可以判断属性是否属于对象本身还是来自原型链。

使用delete操作也可以让原型链中的属性显示出来,因为delete操作不了原型链。

Object.prototype.xxx能在所有对象中访问到xxx

1,        减少全局变量污染,把全局性的资源纳入一个名称空间下,另一个有效的方法是使用闭包

2,        js对象创建的几种方式:

a,字面量

   var obj = {a:’aa’,b:’bb’}

b,基于已有对象进行扩充它的属性及方法。这种方式是最简单的,但它的缺点在于不能基于这个对象进行创建新的对象,要新建这个对象还需要将所有代码重新写一遍,也就是说它不具备模板的特性。

var obj = new Object();
     obj.name ="zhang";   //扩展对象的属性
     obj.setName =function(name){   //扩展对象的方法 
        this.name = name;
     }
     obj.setName("li");
     alert(obj.name);

c,构造函数方式

function Person(name,age){
      this.name = name;
      this.age = age;
      this.getInfo = function(){
        return this.name+" : "+this.age;
      }
    }
    var p = new Person("zhang",23);
    alert(p.getInfo());
    每个实例对象创建时,方法也会创建多份,浪费空间,所以需要把方法提出来

d,使用原型+构造函数方式

//原型+构造函数方式,属性不能放在原型中,因为属性是每个实例特有的,如果放在                
原型中,属性不为简单变量时,改变某一实例属性会影响其他实例属性值,                      
 因为prototype对象被所有实例共享。
   function Person(){
       this.name = new Array();
       this.age = 12;
   }
   Person.prototype.getInfo = function(){
       return this.name+" : "+this.age;
   }
   var p1 = new Person();
   var p2 = new Person();
   p1.name.push("zhang");
   p2.name.push("li");
   alert(p1.getInfo());
   alert(p2.getInfo());


你可能感兴趣的:(js)