js 物件導向 封裝

2021-07-10 22:27:28 字數 2826 閱讀 5931

看了阮一峰大神的部落格,自己寫了js物件導向這一部分的總結

js物件導向部分分為幾個部分:

1.本文介紹物件導向–封裝

2.物件導向–原型鏈

3.物件導向–建構函式的繼承

4.物件導向–非建構函式的繼承

ecmascript支援物件導向程式設計,但不使用類或者介面。物件可以在**執行過程中建立和增強,因此具有動態性而非嚴格定義的實體。在沒有類的情況下,可以採用下列模式在建立物件。

1. 工廠模式

工廠模式的優點:

發明了一種函式,用函式來封裝以特定介面建立物件的細節。

工廠模式的問題:

雖然解決了多個相似物件的問題,但卻沒有解決物件識別的問題。

工廠模式的語法

function

createperson

(name,age,job)

return o;

}var person1 = createperson("wanghuan",22,"software engineer");

var person2 = createperson("shuguang",22,"army");

2. 建構函式模式

建構函式模式的優點:

自定義的建構函式意味著將來可以把它的例項標識為一種特定的型別,這正是建構函式模式勝過工廠模式的地方。

建構函式模式的語法

function

person

(name,age,job) //其實有this物件在,根本不用在執行**前把函式繫結到特定物件上邊

}var person1 = new person("wanghuan",22,"software engineer");

var person2 = new person("shuguang",22,"army");

建構函式模式的缺點:

建構函式主要問題就是每個方法都要在每個例項上重新建立一遍,這種方法建立函式,會導致不同的作用域鏈和識別符號解析。

因此,用

function

person

(name,age,job)

function

sayname

()//把sayname()函式的定義轉移到了建構函式外部,物件共享在全域性作用域中定義的同乙個函式

var person1 = new person("wanghuan",22,"software engineer");

var person2 = new person("shuguang",22,"army");

但還有缺點:

1. 全域性作用域定義的函式每次被乙個物件呼叫,全域性作用域不是名副其實

2. 物件需要定義很多方法,要是全部都定義成全域性函式,自定義的引用型別就絲毫無封裝性可言。

3. 原型模式

缺點:所有屬性的共享會導致所有例項預設一樣的屬性值,不合常理

function

person

() person.prototype.name = "wanghuan";

person.prototype.age = "22";

person.prototype.job = "software engineer";

person.prototype.sayname = function

();var person1 = new person();

var person2 = new person();

person1.name = "shuguang";

alert(person1.name);//shuguang---先搜尋例項物件,就返回

alert(person1.hasownproperty("name"));//true

alert(person2.name);//wanghuan--原型物件屬性返回

delete person1.name;//delete操作符刪除例項屬性

alert(person1.hasownproperty("name"));//false

alert(person1.name);//wanghuan--原型物件屬性返回

原型模式更簡單的語法

以物件字面量形式建立的新物件

function

person

() person.prototype =

};

4. 原型模式和建構函式模型的組合使用
//建構函式

function

person

(name,age,job)

//原型物件

person.prototype =

}var person1 = new person("wanghuan",22,"software engineer");

var person2 = new person("shuguang",22,"army");

person2.friends.push("c");

alert(person1.friends);//a,b

alert(person2.friends);//a,b,c

alert(person1.sayname === person2.sayname);//true

//說明兩者的函式指標相同

js物件導向 封裝

萬物皆物件!一 生成例項物件 原始模式 有乙隻貓我們把它看成乙個物件,它具有兩個屬性 名字 顏色 var cat 下面我們生成兩個例項物件 var cat1 cat1.name 黑貓 按照原型物件的屬性賦值 cat1.color 黑色 var cat2 cat2.name 白貓 cat2.color...

js 物件導向 封裝

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

JS難點 物件導向 封裝

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