javescript 的 對象

 

一,定義:
對象是JavaScript的一個基本數據類型,是一種複合值,它將不少值(原始值或者其餘對象)聚合在一塊兒,可經過名字(name/做爲屬性名)訪問這些值。即屬性的無序集合。html

關鍵是name屬性名能夠是什麼類型,如下是一些測試(不完整):python

 

 二,建立對象的方法數組

1.在{}內直接建立鍵值對,如上測試示例函數

2.使用實例化類的方法:new + Object()測試

let car = new Object(); //實際上,car.type的寫法最終在後臺自動轉爲car['type']執行的
car.type = 'Honda'; //等同於car['type'] = 'Honda'
car.color = 'white'; //等同於 car['color'] = 'white'
cat.seat = 5;    //等同於 cat['seat'] = 5
car.sayColor = function(){alert(this.color)}

因爲1,2兩種方法在使用同一接口建立多個對象時,會產生大量的重複代碼,爲此,有了工廠模式this

3.工廠模式--函數返回的形式spa

function creaeCar(type,color,seat){
  let obj = new Object();
  obj.type = type;
  obj.color = color;
  obj.seat = seat;
obj.sayColor = function(){alert(this.color)}
return obj; }

let car01 = createCar('Honda','white',5);//instanceof 沒法判斷它是誰的實例,只能判斷是對象
person1 instanceof Object //true
 

因爲工廠模式沒有解決對象的識別問題,檢測到的都是object類型,不像是具體的Array,Date等類型,所以又出現了構造函數模式的建立方法。prototype

4.構造函數模式指針

1 function Car(type,color,seat){
2     this.type = type;
3     this.color = color;
4     this.seat = seat;
this.sayColor = function(){alert(this.color)}
5 } 6 7 let car01 = Car('Honda','white',5); //此時car01 instanceof Car //true 8 console.log(Car.constructor);//返回建立此對象的數組,函數的引用

有上例能夠看出工廠模式和構造函數模式的不一樣之處:code

(1)沒有顯式地建立對象;(2)直接將屬性和方法賦給了this對象;(3)沒有return語句

實際上,調用構造函數的過程以下:

建立一個新對象==》將構造函數的做用域賦給新對象,便是將this指向這個新對象==》執行構造函數,爲新對象添加屬性==》自動返回新對象

不過構造函數也是有缺陷的,每一個實例都包含不一樣的function實例,構造函數內的方法在作同一件事,可是實例化後卻產生了不一樣的對象(方法sayColor是函數,函數也是對象)。

所以又產生了原型模式。

5.原型模式

function Car(){}

Car.prototype.type = 'Honda';  //至關於python中公共的類變量
Car.prototype.color = 'white';
Car.prototype.seat = 5;
Car.prototype.sayColor = function(){aleart(this.color)};

console.log(Car.prototype);//Object {type:'Honda',color:'white',seat:5}

let car01 = new Car();
console.log(car01.type);//Honda
let car02 = new Car();
car02.color = 'red';
console.log(car02);//Car {color:'red'}
console.log(car02.prototype.color); //報錯的
console.log(car02.type); // 顯示的將會是原型默認的‘Honda'

 原型模式的好處是全部實例共享它的屬性和方法,即公共屬性,能夠設置私有屬性值,如car02.color='red',只是針對實例car02,將覆蓋原型對象上的同名屬性(方法)。

 

6.混合模式(構造函數+原型模式

構造函數模式用於定義實例屬性,原型模式用於定義方法和共享屬性

function Car(type,color,seat){
    this.type = type;
    this.color = color;
    this.seat = seat;
}

Car.prototype = {
    constructor: Car,  //每一個函數都有prototype屬性,指向該函數原型對象,原型對象都有constructor屬性,這是一個指向prototype屬性所在函數的指針
    sayColor: function(){
        alert(this.color);
    }
}

let car01 = new Car("Honda",'white',5);
console.log(car01);
let car02 = new Car("BMW",'blue',2);
console.log(car02);

能夠看出,混合模式共享着對相同方法的引用,又保證了每一個實例有本身的私有屬性。最大限度的節省了內存

 

 

https://www.cnblogs.com/libin-1/p/5911190.html

https://www.cnblogs.com/juggdxy/p/8245491.html

相關文章
相關標籤/搜索