標籤:原型 拷貝 對象 turn 接收 記憶體 設計模型 針對 封裝
對象具有三大特性:封裝,繼承,多態
一、封裝
1.函數的封裝是為了函數的安全性,將對象進行封裝,通過有限的介面衍化不同的對象
2.工廠函數封裝
工廠函數是設計模型中的一種說法,不是通過類執行個體化建構函式,而是通過函數進行構造對象,在函數內部建立一個對象,通過參數的傳遞實現對象的更多控制,並將對象返回,當屬性相同時造成記憶體的浪費。
// (函數裡建立一個對象,對象的屬性值由自己傳入,) function person(name,age,say){ var obj ={}; obj.name=name; obj.age=age; obj.say=say; //回調 return obj; } function say1 (){ alert(‘說話‘) } function say2 (){ alert(‘笑‘) } var ls =person(‘ls‘,16,say2); //(不需建構函式,接收的傳回值本身就是對象) var zs =person(‘zhangsan‘,18,say1); // (zs變為對象,接收工廠函數的傳回值)
3.建構函式封裝
function person(name,age){ this.name=name; this.age=age;}person.prototype.say=function(){ alert("說話")}var zs=new person("zs",12);var ls=new person("ls",15);zs.say();ls.say();
console.log(ls instanceof Object) //true
console.log(ls instanceof person) //true
//公用程式碼片段放在prototype原型中儲存,其屬性是固定的,不可改變
4.建構函式與工廠函數的異同
1)工廠函數需要建立對象,並且必須有傳回值
2)工廠函數針對的是Object的物件模型,而建構函式可以匹配自訂的物件模型
3)工廠函數只能在局部添加新的屬性和方法,建構函式可重寫,在全域中添加新屬性和方法
4)建構函式在全域中定義相同的局部變數,容易造成全域汙染,this.xx在局部中擷取不到,就會去全域中擷取。
二、繼承(實現代碼的重複使用)
1.繼承的原理:拷貝
1)深拷貝:拷貝對象的值
2)淺拷貝:拷貝對象的地址,影響來源物件的屬性值
var json={name:"zhangsan",age:12,son:{name:"lisi"}} var json1=copy(json) //淺拷貝 function copy(json){ var newobj={} for(var i in json){ newobj[i]=json[i] } return newobj; } json1.son.name="lisi1" console.log(json.son.name) //lisi1 //深拷貝 function copy(json){ var newobj={}; for(var i in json){ if(typeof json[i]=="object"){ newobj[i]=copy(json[i]) }else{ newobj[i]=json[i] } } return newobj } json1.son.name="lisi1" console.log(json.son.name) //lisi
2.
javascript--對象的特性