构造函数的属性和方法
构造函数: function Cat (name ,color){
this.name = name;
this.color = color;
}
//生成实例对象
var cat1 = new Cat('大猫','黄色');
var cat2 = new Cat('小猫','蓝色');
构造函数是一个普通的函数,但是内部使用了this变量,对构造函数使用new 运算符,就能生成实例,并且this变量会绑定在实例对象上。
cat1 和 cat2 会自动增加constructor 属性,指向他们的构造函数。
cat1.constructor == Cat //true;
cat2.constructor == Cat //true;
验证原型对象与实例对象之间的关系
cat1 instanceof Cat //true
cat2 instanceof Cat //true
每一个构造函数 都会有每一个prototype 属性 这个对象上的属性和方法都会被实例对象继承。
我们要在Cat方法加上一个eat方法和type属性 ,
function Cat(name,color){
this.name = name;
this.color = color;
this.type ='cat';
this.eat = function(){
alert('eat');
}
}
这样的话 在每次创建实例对象的时候 type和eat() 方法都是一模一样的内容,多占用一些内容,这样不环保,也缺乏效率。
Cat.prototype.type ='cat';
Cat.protitype.eat = function(){
alert('eat');
}
把要增加的不变属性和方法加到prototype上,可以使这些在内存中只生成一次。
isPrototypeOf() 配合Protype属性,来判断某个Protype属性和某个实例对象的关系
Cat.prototype.isProtypeOf(cat1);//true
Cat.protype.isProtypeOf(cat2);//true;
hasOwnProperty()
每一个实例对象都有一个hasOwnProperty()方法,来判断某个属性是否属于示例对象还是继承与构造函数。
cat1.hasOwnProperty('name');//true;
cat2.hasOwnProperty('type');//false
in运算符
in运算符可以用来判断,某个实例是否含有某个属性,不管是不是自身属性
‘name’ in cat1 //true;
'type' in cat1 //true;
in运算符还可以用来遍历某个对象的所有属性。