对象的建立模式分类函数
一.工厂模式this
1.工厂固定生产一种或几种商品 工厂模式的使用场景 ---对象内部属性值基本一致----》编码
function Product( proName, Pinpai , createDate){
}
//建立多个商品对象,除了变量名不一样,具备相对独立的内存空间-----商品名称、品牌相同,出产日期不一样
//不一样的对象包含相同的属性,形成代码量增多
var pro1 = new Product("酸奶","哇哈哈","2016-11-27");
var pro2 = new Product("酸奶","哇哈哈","2016-11-27");
var pro3 = new Product("酸奶","哇哈哈","2016-11-27");spa
因此使用工厂模式,对工厂赋值便可prototype
2.工厂模式特色对象
工厂模式,对建立对象进行了封装,自动组装对象的内部属性ip
工厂模式,通常用于构建内存内容类似的对象内存
<script>原型链
//建立一个商品类----包含商品应有信息
function Product( proName, Pinpai , createDate){
this.proName = proName;
this.Pinpai = Pinpai
this.createDate =createDate;
}
//定义一个产品工厂,为商品信息赋值
function ProductFactory(){
}
//扩展产品工厂属性
ProductFactory.proName = "酸奶";
ProductFactory.Pinpai = "娃哈哈";
//扩展一个方法
//生产日期不一样,用执行一个Date()方式的构造函数
ProductFactory.createProduct = function(){
var pro = new Product( ProductFactory.proName, ProductFactory.Pinpai, new Date() );
return pro;
}
var pro1 = new Product("酸奶","娃哈哈","2016-11-28"); //普通建立对象方式
var pro2 = ProductFactory.createProduct(); //工厂建立对象方式
console.log(pro1.proName);
console.log(pro2.createDate);
</script>资源
二.构造函数模式
构造函数模式:使用构造函数建立对象实例
function Person(name,age){
//属性
this.name=name; //这里this只 window
this.age=age;
//行为
this.sayHello = function(){
console.log("你好,我是" + this.name);
}
}
//person 对象也具备name age属性
//经过构造函数建立对象
var person1 = new Person("Davi",19);
var person2 = new Person("MIL",20);
person1.sayHello()
构造函数执行优势:在建立对象同时,就能够给当前对象进行属性赋值
缺点:每次建立对象,都会执行赋值---资源浪费
建立第一个对象,建立一个 function 而后赋值给 run,
建立第二个对象还要建立一个run方法,建立两次函数,但执行的动做相同
每次建立对象,
3.原型模式---原型链构造方式
原型模式:将属性和方法放到构造函数的 prototype 对象中。只要建立当前构造函数的对象,对象自己就具有当前构造函数的原型对象内的方法、属性----使多个对象拥有相同的属性方法。
//原型链构造函数
function Person(){
}
Person.prototype.run = function(){
console.log("快速跑");
}
var person1 = new Person();
var person2 = new Person();
person1.run();
person2.run();
//person1 person2 都共有 Person的原型对象中的方法
缺点:没有办法进行赋值想赋值只能
person1.name ="zhangsan";
person1.age =19 -----------------增长额外编码 并且不知道Person内的属性。
1.单纯使用原型链完成对象建立,没法对对象属性进行赋值
2.没法保证每一个对象的 属性名 相同
因此要进行第二种第三种整合方式
4.构造原型组合模式 --最好的方式
构造原型组合模式:使用 构造函数 和 原型模式 组合完成对象建立。构造函数完成基本属性的赋值,原型完成对象函数的绑定
//对象原型组合模式
//经过构造函数 初始化对象,并赋值
function Person( name, age){
this.name=name;
this.age=age;
}
//sayHello 等于一个匿名函数
Person.prototype.sayHello = function(){
console.log("名字:"+ this.name); //this表明当前对象 Person
}
//在构建对象同时进行赋值
var person1 = new Person( "Adad",18); //person1 引用 Person
var person2 = new Person( "Mada",18);
person1.sayHello(); //谁调用 this就是谁 this为 person1 person2.sayHello();