Javascript-组合使用构造函数和原型
创建自定义类型最常见的方式就是构造函数与原型模式,构造函数用于定义实例属性,原型用于定义共享属性和方法
2 min read
By
myfreax

创建自定义类型最常见的方式就是构造函数与原型模式,构造函数用于定义实例属性,原型用于定义共享属性和方法
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();