1. 程式人生 > >javascript--對象的特性

javascript--對象的特性

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--對象的特性