构造函数和原型模式混合使用

一天天的过去了,感觉在混日子,从新捡起js高程,感觉似曾相识,又很陌生,果然不同时间段看到的东西不一样,准备每天花一小时,在高程上,每天一博客,写给懒惰的自己

构造函数

 function Peson(name,age,job) {
    this.age = age;
    this.name = name;
    this.job = job
}
var peson1 = new Peson(xx, 1, dd)
var peson2 = new Peson(xm,2 cc)

\ peson1 和peson2new出来两个实例,相当于构造函数的方法执行了两次,所以可以把相同的放在原型属性中,不同的s时候在用这种模式

原型开发模式:

 Person.prototype = {
constructor : Person,
sayName : function(){
alert(this.name);
}
}
var peson1 = new Peson()
var peson2 = new Peson()
peson1.sayName() === peson2.sayName()
在原型中,两个实例公用一个方法

混合使用各取所得如:

 function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["Shelby", "Court"];
}
Person.prototype = {
constructor : Person,
sayName : function(){
alert(this.name);
}
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");
person1.friends.push("Van");
alert(person1.friends); //"Shelby,Count,Van"
alert(person2.friends); //"Shelby,Count"
alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true

在这个例子中,实例属性都是在构造函数中定义的,而由所有实例共享的属性 constructor 和方法 sayName() 则是在原型中定义的。而修改了 person1.friends (向其中添加一个新字符串),并不会影响到 person2.friends ,因为它们分别引用了不同的数组