类的创建方式:
1、工厂模式:在构造函数里定义一个对象,最后return这个对象。
function app(name,age,job){
var obj = {
name: name,
age: age,
job: job
}
return obj;
}
var myObj = app("bill",32,"engineer");
console.log(myObj.name) //bill
2、原型模式:让所有的对象实例共享原型属性和方法。
每个函数都有一个prototype属性,这个属性指向通过调用构造函数创建的那个对象实例的原型对象。Func.prototype --> new Func()的原型对象
function Person(){}
Person.prototype.name = "bill";
Person.prototype.age = 32;
Person.prototype.job = "teacher";
var pers1 = new Person();
var pers2 = new Person();
//pers1与pers2共享Person.prototype上的属性和方法,在一个对象上作原型属性的改变会影响另一个对象。
3、动态原型模式:
将信息都封装在构造函数内部,通过条件判断,在必要时再初始化原型。
function Person(name, age,job){
this.name = name;
this.age = age;
this.job = job;
}
if( typeof this.sayName != "function"){
Person.prototype.sayName = function(){
alert(this.name!);
};
}
4、寄生构造函数模式:
除了用构造函数封装对象,并用new调用该构造函数,其它与工厂模式完全相同。
function Person(name,age,job){
var obj = {
name: name,
age: age,
job: job
}
return obj;
}
var myObj = new Person("bill",32,"engineer");
console.log(myObj.name) //bill
5、稳妥构造函数模式:
与寄生构造函数类似,不同点在于:新创建对象的实例方法不引用this;不适用new操作符调用构造函数。
function Person(name, age, job){
var obj = new Object();
obj.sayName = function(){
alert(name);
}
return obj;
}
var friend = Person("bill", 43, "student");
friend.sayname() //稳妥构造函数中,只有此方法可以访问到name属性。
类的继承:
1、借用构造函数继承,也叫做经典继承/伪造对象。
fucntion Super(){
this.colors = ["red", "yellow", "green"]
}
function Sub(){
Super.call(this); //Sub调用了Super方法,那么Sub就继承了Super的方法和属性。
}
var instance1 = new Sub();
instance1.colors.push("black") //"red", "yellow", "green","black"
var instance2 = new Sub();
instance1.colors //"red", "yellow", "green"
也就是说,两个通过Sub构造函数创建的对象实例,每个都能获得继承来的一份副本,修改继承来的属性不影响源属性。
2、组合继承:伪经典继承。将原型链和借用构造函数继承结合在一起。
function Super(name){
this.name = name;
this.colors = ["red", "yellow", "green"];
}
Super.prototype.sayName = function(){
alert(this.name);
}
function Sub(name, age){
Super.call(this, name); //继承Super的name属性
this.age = age;
}
Sub.prototype = new Super(); //Sub的原型对象是Super的实例。Sub继承Super的属性和方法。
Sub.prototype.constructor = Sub;
Sub.prototype.sayAge = function(){
alert(this.age);
}
3、原型式继承
4、寄生式继承
5、寄生组合式继承