對象的建立模式分類函數
一.工廠模式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();