Javascript-组合使用构造函数和原型

创建自定义类型最常见的方式就是构造函数与原型模式,构造函数用于定义实例属性,原型用于定义共享属性和方法

function Person(name,age,job){  
    this.name = name;
    this.age = age;
    this.job = job;
}
Person.prototype.sayName = function () {  
    console.info(this.name);
};
//code...
var person1 = new Person('freax',12,'javascript');  
var person2 = new Person('huangyanxiong',12,'php');

console.info(person1.name);//freax  构造函数每个实例都有自己的属性值  
console.info(person2.name);//huangyanxiong

//原型对象上的方法共享都是调用原型上的sayName 方法
person1.sayName();    //freax  
person2.sayName();    //huangyanxiong  

这种构造函数与原型混合模式,是目前ECMAscript应用最广泛,认可度最高的一种自定义类型的方法,但是有时候你可能会对组合构造函数模式和原型模式感到奇怪,也有可能你在编码的过程中你往//code ...的位置写满你的其它代码,然后再往原型添加方法,也有可能你编码的过程中重写整个原型对象(如果重写整个原型对象会切断现有实例和原型对象的联系)到最后可能让自己都不知道往原型添加过原型属性,导致代码难以维护,因此需要一种新的模式设计代码

动态原型模式

 function Person(name,age,job){
   this.name = name;
   this.age = age;
   this.job = job;
   var prototype = Person.prototype; //将Person的原型对象赋值给prototype是为了当改变函数名时尽量减少更改的代码次数
   prototype.prototype.sayName = function () {
      alert(this.name);
   };
   prototype.prototype.a = function () {
      alert(this.name);
   };
   prototype.prototype.b = function () {
      alert(this.name);
   };
 }

 var friend = new Person('freax',23,'javascript');
 friend.sayName();
你的欣赏是我最大的动力

Yanxiong Huang

My name is Yanxiong Huang. graduated from Nanyang middle school.Love Linux,familiar with Node.js,Docker,Serverless... and more Web technology.Contact Me:QQ 31356617;Email:huangaynxiong2013@gmail.com

guangzhou,china http://www.myfreax.com

乐在分享