javascript--對象的特性
阿新 • • 發佈:2017-05-22
typeof 更多 進行 hang lis eof 代碼 == spa
對象具有三大特性:封裝,繼承,多態
一、封裝
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--對象的特性