在Javascript中,我们创建的每个函数都有一个prototype属性,这个属性是一个对象;它的用途是包含可以有特定类型的所有实例共享的属性和方法。可以这么来理解:prototype通过调用构造函数而创建的那个对象的原型对象。
使用原型的好处:可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中。
//构造方法 function Box(name,age){ this.name = name; //添加属性 this.age = age; this.run = function(){ //添加方法 return this.name + this.age + '运行中...'; }; }; var box1 = new Box('lee',100); //实例化 alert(box1.run()); //原型方法 function Box(){} Box.prototype.name = "Lee"; //原型属性 Box.prototype.age = 100; Box.prototype.run = function(){ //原型方法 return this.name + this.age + '运行中'; }; var box1 = new Box(); var box2 = new Box(); alert(box1.name); alert(box1.run());
区分实例方法与原型方法:
如果是实例方法,不同的实例化,他们的方法地址是不一样的,是唯一的;
如果是原型方法,那么他们地址是共享的,大家都是一样的;
注:1,在原型模式声明中,多了两个属性,这两个属性都是创建对象时自动生成的。__proto__属性是实例指向原型对象的一个指针,它的作用就是指向构造函数的原型属性construct。通过这两个属性,就可以访问到原型属性和方法了。
2,判断一个对象是否指向了该构造函数的原型对象,可以使用isPrototypeOf()方法来测试;
eg:alert(fun_name.prototype.isPrototypeOf(name)); //只要实例化,即都会指向原型对象;
原型模式的执行流程:
1,先查找构造函数实例里的属性或方法,如果有,立刻返回;
2,如果构造函数实例里没有,则去它的原型对象里找,如果有,就返回;