JavaScript prototype 和hasOwnProperty等方法等

经常看 ,也经常忘, 所以先记录下来。。

function Cat(name,color){
    this.name = name;
    this.color = color;
    this.type = "猫科动物";
    this.eat = function(){alert("吃老鼠");};
  }

这样的话 每次new Cat('cnblogs','white')的时候,都会生成一个type和eat属性,有多少个对象也就生成多少次
但是这个两个属性是每个对象都是一致的,所以可以采用原型来出来:

function Cat(name,color){

    this.name = name;

    this.color = color;

  }

  Cat.prototype.type = "猫科动物";

  Cat.prototype.eat = function(){alert("吃老鼠")};

这样每个对象其实的type和eat都是只生成一份,有点像java点静态变量一样。

  

关于属性的话有一些常用的方法:

isPrototypeOf  :

Cat.prototype.isPrototypeOf(cat1)

 

只要cat1是Cat的一个实例,则返回true

hasOwnProperty:

alert(cat1.hasOwnProperty("name")); 

如果属性name是对象自己的,则返回true,如果属性是由原型prototype来定义的话,则返回false

In:

"name" in cat1

in 不是一个方法,而算是一个运算符

不管name属性是构造函数定义的还是prototype定义的,只要有这个属性,则返回true

这点和hasOwnProperty不一样

 

还可以用in来遍历对象的属性:

 for(var prop in cat1) { alert(prop+":"+cat1[prop]); }

 

posted on 2012-07-22 16:25  cfd406635982  阅读(255)  评论(0编辑  收藏  举报