所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量
如果没有没有this,只能算是一种原始的封装
而对构造函数使用new运算符,就可以生成实例
Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。
这个对象的所有属性和方法,都会被构造函数的实例继承。
这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上,节省内存 。
下边是一个完整的例子:
function Cat(name,color){
this.name = name;
this.color = color;
}
Cat.prototype.type = "猫科动物";
Cat.prototype.eat = function(){alert("吃老鼠")};
然后,生成实例。
var cat1 = new Cat("大毛","黄色");
var cat2 = new Cat("二毛","黑色");
alert(cat1.type); // 猫科动物
cat1.eat(); // 吃老鼠
//实例也会自动生成constructor属性,指向构造函数
alert(cat1.constructor == Cat); //true
alert(cat2.constructor == Cat); //true
这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率。
alert(cat1.eat == cat2.eat); //true