工厂模式
1.没有new
function CreatePerson(name,qq)
{
//原料
var obj=new Object()
//加工
obj.name=name
obj.qq=qq
obj.showName=function()
{
console.log(this.name)
}
obj.showQQ=function()
{
console.log(this.qq)
}
//出厂
return obj
}
var obj1=CreatePerson('LiLei',2326657890)
obj1.showName()
var obj2=CreatePerson('HanMeiMei',9325657190)
obj2.showQQ()
2.有new
function createPerson(name,qq)
{
//系统自动创建空白对象
//var this=new Object()
this.name=name
this.qq=qq
this.showName=function()
{
console.log(this.name)
}
this.showQQ=function()
{
console.log(this.qq)
}
//系统自动返回
//return this
}
var obj1=new CreatePerson('LiLei',2326657890)
obj1.showName()
var obj2=new CreatePerson('HanMeiMei',9325657190)
obj2.showQQ()
混合模式
function createPerson(name,qq) //用构造函数加属性
{
this.name=name
this.qq=qq
}
CreatePerson.prototype.showName=function() //用原型加方法
{
console.log(this.name)
}
CreatePerson.prototype.showQQ=function()
{
console.log(this.qq)
}
var obj1=new CreatePerson('LiLei',2326657890)
obj1.showName()
var obj2=new CreatePerson('HanMeiMei',9325657190)
obj2.showQQ()
单体模式(json)
var json1={
name:"lilei",
qq:23344343,
showName:function(){
console.log(this.name)
},
showQQ:function(){
console.log(this.qq)
}
}
json1.showName()
继承
原理:a.call(b),则原本指向a的属性/方法转向b,实现了b对a的继承。
function A(){ //A的构造函数
this.abc=12
}
A.prototype.show=function(){ //用原型加方法
console.log(this.abc)
}
function B(){
A.call(this) //令B继承A的属性
}
B.prototype.unique=function(){
console.log("it is s a unique function for B")
}
for(var i in A.prototype)
{
B.prototype[i]=A.prototype[i]
//令B继承A的方法。注意不能直接使B.prototype=A.prototype,会造成引用捆绑,导致B独有的unique方法共享给A
}
var b=new B()
console.log(b.abc)//B继承自A的属性
b.show()//B继承自A的方法
b.unique()//B特有的方法