js物件導向 封裝

2021-07-29 09:47:05 字數 2180 閱讀 9593

萬物皆物件!

一、生成例項物件--原始模式

有乙隻貓我們把它看成乙個物件,它具有兩個屬性--名字--顏色

var cat =

下面我們生成兩個例項物件

var cat1 = {}

cat1.name = "黑貓"; //按照原型物件的屬性賦值

cat1.color = "黑色";

var cat2 = {}

cat2.name = "白貓";

cat2.color = "白色";

這就是最簡單的封裝了,把兩個屬性封裝在乙個物件裡面。但是,這樣的寫法有兩個缺點,一是如果多生成幾個例項,寫起來就非常麻煩;
二是例項與原型之間,沒有任何辦法,可以看出有什麼聯絡
二、原始模式改進

我們建立乙個函式解決**重複

function cat(name,color)

}

然後生成例項物件,其實就是在呼叫函式

var cat1 = cat("黑貓","黑色");

var cat2 = cat("白貓","白色");

這樣就是cat1和cat2之間沒有什麼關係,不能反映出他們是同乙個原型物件例項

三、建構函式模式

所謂建構函式其實就是乙個function內部使用了this變數,對建構函式使用new運算子就能建立乙個例項物件,並且this變數被繫結在例項物件上

function cat(name,color)
var cat1 = new cat("大毛","黃色");

var cat2 = new cat("二毛","黑色");

alert(cat1.name); // 大毛

alert(cat1.color); // 黃色

這時cat1和cat2含有乙個constructor屬性指向他們的建構函式
alert(cat1.constructor == cat); //true

alert(cat2.constructor == cat); //true

js還提供了乙個instanceof運算子驗證原型物件與例項物件之間的關係

alert(cat1 instanceof cat); //true

alert(cat2 instanceof cat); //true

四、建構函式的模式問題

建構函式會造成記憶體浪費

現在為cat物件新增乙個不變的屬性type(種類)再新增乙個方法eat(吃)

function cat(name,color)

}

var cat1 = new cat("大毛","黃色");

var cat2 = new cat ("二毛","黑色");

alert(cat1.type); // 貓科動物

cat1.eat(); // 吃老鼠

這樣做就是每一次生成例項type和eat的內容都是一樣的,占用記憶體,那麼就要想辦法讓type和eat在記憶體中只生成一次

5、prototype

js規定每乙個建構函式都有乙個prototype屬性指向另乙個物件,這個物件的所有屬性和方法都會被建構函式的例項繼承,

這樣我們可以把那些不變的屬性和方法定義在prototype上

function cat(name,color)

cat.prototype.type = "貓科動物";

cat.prototype.eat = function();

然後生成例項

var cat1 = new cat("黑貓","黑色");

var cat2 = new cat("白貓","白色");

alert(cat1.type); // 貓科動物

cat1.eat(); // 吃老鼠

這時每乙個例項的type和eat都指向同乙個記憶體位址--prototype

驗證

alert(cat1.eat == cat2.eat); //true

js 物件導向 封裝

看了阮一峰大神的部落格,自己寫了js物件導向這一部分的總結 js物件導向部分分為幾個部分 1.本文介紹物件導向 封裝 2.物件導向 原型鏈 3.物件導向 建構函式的繼承 4.物件導向 非建構函式的繼承 ecmascript支援物件導向程式設計,但不使用類或者介面。物件可以在 執行過程中建立和增強,因...

js 物件導向 封裝

物件導向 程式中都是先用物件解構來描述現實中乙個具體事物的屬性和功能,然後按需使用物件中的屬性和功能。為了大量資料的使用和維護 封裝,繼承,多型 一 封裝 建立乙個物件,集中儲存現實中乙個事物的屬性和功能 為了大量資料的使用和維護 何時 今後只要使用物件導向,第一步都是建立物件,集中儲存事物的屬性和...

JS難點 物件導向 封裝

我覺得js的難點之一就是物件導向程式設計。它在寫法上比面向過程相對來說複雜一些 從廣義上說,一切皆物件 狹義上說,是一種復合資料型別object。直接字面量 var person person.height 180cm person.interset function 使用關鍵字new new ob...