js使用工厂和构造函数方式创建对象
//工厂方式创建
function createPerson(name,age){
var o = new Object();
o.name=name;
o.age=age;
o.say = function(){
alert(this.name+"\t"+this.age);
}
}
//使用工厂的方式,虽然解决了类的问题。但是依然存在问题
//我们无法获取到 p1或者p2的类型。通过typeof仅仅得到的是OBject
//但是要通过instanceof()不知道是哪个类型
//所以我们就要使用构造函数方式创建
var p1 = new createPerson("Amos",12);
var p1 = new createPerson("Ada",12);
//构造函数创建
//这样创建和工厂创建差不多。但是这样可以去匹配类型
//alert( p instanceof Person );
function Person (name,age){
this.name=name;
this.age=age;
this.say=function(){
alert(this.name+"\t"+this.age);
}
}
Person p1 = new Person("Amos",12);
Person p2 = new Person("Ada",12);
alert(p1.say==p2.say) // false; 每一个对象中都会存在一个对方法的拷贝,如果对象的行为很多,那么就会占用很多空间
//解决办法:可以把函数放到全局变量来定义。
function Person (name,age){
this.name=name;
this.age=age;
this.say=say;
}
function say(){
alert(this.name+"\t"+this.age);
}
//但是提出来就出现一个问题,这个函数就可以被window访问。这个时候就破坏了封装性。
//而且如果有大量的属性。就会导致整个代码中有很多全局函数。不利于开发。
浙公网安备 33010602011771号