//工厂模式
function st(name,age){//设置函数对象,设置形参,方便传参
var a = new Object() //声明创建对象,因为使用了函数方法,最好用new创建 不建议用{}直接创建;
a.name=name;//将调用的实参的值赋予新对象;
a.age=age;
return a;//一定要返回值给对象
}
function dd(name,age){
var a = new Object()
a.name=name;
a.age=age;
return a;
}
//创建实参,用变量封装
var txt1=st('小可爱',5)
var txt2=st('大可爱',100)
var txt3=dd('不可爱',-999)
console.log(txt1,txt2,txt3)
// 该写法弊端为后台console.log(),显示对象名都为Object,无法第一时间区分对象名.
// 列如:txt1 和 txt3 后台的对象名都为Object
// 为了方便后台区分,使用构造函数方式,进行区分
//构造函数 函数名字母大写,并且我们需要使用new 实例化
function Pdd(name,age){
//在当前构造函数里,this在没有实例化时,为空对象
this.name=name;
this.age=age;
//当实例化时,对象为 var a,及是this为a
// 原型方法
// this.say=function(){ 为了优化该函数方法 ,如果用调用全局函数的话
// console.log('say')
// }
// 如:
// this.say=say();
}
// function say(){ 用该方式容易造成,全局变量污染,(如果有同名函数方式,但是内容不一样,有可能会被覆盖)
// // console.log('say')
// }
// 因此使用原型方式来创建-------(构造函数+原型创建)
Pdd.prototype.say=function(){ //构造函数放属性,方法放原型
console.log('say')
}
function Pd(name,age){
this.name=name;
this.age=age;
}
var a = new Pdd('拼夕夕',99)
var b = new Pd('拼夕',66)
console.log(a,b)
// 该写法解决了后台显示名称,方便识别;
//say函数方法就在原型里面 ,也就是Pdd的父级如图
//say:f()