有一家母猪要生产一头猪,首相我们不考虑母猪是一个对象,就想成有一头母猪要生产一个对象,这个对象是一头小猪,我们可以使用工厂模式
如下:
function bigPic(){
var samllPic = new Object();
samllPic.name = "sbgdg";
return samllPic;
}
samllPic = bigPic();
console.log(samllPic.name); //sbgdg
这里使用一个叫作bigPic的函数来产一个小猪,在函数的内部有一个变量samllPic来引用一个新创建的对象,给这个对象设置name属性,叫"sbgdg"。最后用return来返回这个引用,实际就是这个叫bigPic的函数返回的不是别的,而是一个对象的引用。执行完函数,局部变量samllPic被撤销,返回的对象引用赋值给全全局变量samllPic。
第一个samllPic和第二个samllPic是不一样的,这个首先想到。
有一个缺点就是得到一个小猪,但我们不知道母猪的信息,也就是类的信息,单单一个函数绝不能满足我们的需要,接着下一个模式出现了构造模式
构造模式很好解决了对象和类之间的关系
//构造模式
function BigPig(){
this.name = "ssqwgkg";
this.samllPig = null;
this.makePic = function(name){
this.samllPig = new SamllPig(name);
}
}
function SamllPig(name){
this.name = name;
}
var bigPig = new BigPig();
bigPig.makePig("sbgdg");
console.log(bigPig.name); //ssqwgkg
console.log(samllPig.name);//sbgdg
可以看到这次和上面的不同,这里我们把母猪作为一个类,实例化一头母猪,在母猪的内部立生一头小猪
母猪的实例对象bigPig执行一个makePig的方法,则对象有一个属性samllPic是等于new SamllPig(name),这个时候又实例化了一个SamllPic这个类,把小猪作为属性赋予给母猪实例(大家都知道小猪永远都是母猪的)
每一个实例化的对象都有一个constructor属性就是指向各自的类名
console.log(bigPig.constructor==BigPig);//true
console.log(bigPig.samllPig==SamllPig); //true
来有一个检测一个对象是否是一个类的实例的关键字,就是 instanceof
console.log(bigPig instanceof BigPig); //true
console.log(bigPig.samllPig instanceof SamllPig); //true