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]); }