国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js面向對象編程

zeyu / 2588人閱讀

摘要:構造函數模式通過構造函數創建的對象可以通過標識對象類型,通過檢測對象類型。實際上,應該說是沒有辦法在不影響所有對象實例的情況下,給超類型的構造函數傳遞參數。

==什么是對象?==
就是無序屬性的集合,通過屬性或者方法名與值的一一映射。
==對象的屬性類型==
對象中還定義了一些js中不能直接訪問的屬性,是為了實現js引擎用的。有數據屬性訪問器屬性兩種。
1.數據屬性
數據屬性包含一個數據值的位置。在這個位置可以讀取和寫入值。數據屬性有 4 個描述其行為的
特性。

把新值保存在這個位置。這個特性的默認值為 undefined。

要修改屬性默認的特性,必須使用 ECMAScript 5 的 Object.defineProperty()方法。


注意:
1》 configurable 設置為 false,表示不能從對象中刪除屬性。如果對這個屬性調用 delete,則 在非嚴格模式下什么也不會發生,而在嚴格模式下會導致錯誤。而且,一旦把屬性定義為不可配置的, 就不能再把它變回可配置。
2》在調用 Object.defineProperty()方法時,如果不指定,configurable、enumerable 和 writable 特性的默認值都是 false。
2.訪問器屬性
訪問器屬性不包含數據值;包含一對兒 getter 和 setter 函數(不過,這兩個函數都不是必需的)。 在讀取訪問器屬性時,會調用 getter 函數,這個函數負責返回有效的值;在寫入訪問器屬性時,會調用 setter 函數并傳入新值,這個函數負責決定如何處理數據。訪問器屬性有如下 4 個特性。

? [[Get]]:在讀取屬性時調用的函數。默認值為 undefined。
? [[Set]]:在寫入屬性時調用的函數。默認值為 undefined。
訪問器屬性不能直接定義,必須使用 Object.defineProperty()來定義。

可以通過Object.definePro- perties()定義多個屬性;
使用 ECMAScript 5 的 Object.getOwnPropertyDescriptor()方法,可以取得給定屬性的描述符。

==創建對象的方式==
通過字面量的方式可以創建對象,但是創建有類似屬性的對象時會產生大量重復代碼。
1.工廠模式
用函數來封裝以特定接口創建對象。


缺點就是無法知道一個對象的類型。
2.構造函數模式


通過構造函數創建的對象可以通過constructor標識對象類型,通過instanceof檢測對象類型。
構造函數模式與工廠模式對比:
1》沒有顯式地創建對象;
2》直接將屬性和方法賦給了 this 對象;
3》 沒有 return 語句。
通過new操作符調用構造函數會經歷4個步驟:
(1) 創建一個新對象;
(2) 將構造函數的作用域賦給新對象(因此 this 就指向了這個新對象);
(3) 執行構造函數中的代碼(為這個新對象添加屬性);
(4) 返回新對象。


構造函數也可作為普通函數調用
Person("Greg", 27, "Doctor"); // 添加到window window.sayName(); //"Greg"
也可以在另一個對象的作用域中調用
var o = new Object();
Person.call(o, "Kristen", 25, "Nurse"); o.sayName(); //"Kristen"

構造函數模式的缺點就是每個方法都要在每個實例上重新創建一遍

function Person(name, age, job){

    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = new Function("alert(this.name)"); 
    // 與聲明函數在邏輯上是等價的 

}
alert(person1.sayName == person2.sayName); //false
3.原型模式


通過prototype為對象添加屬性和方法。這樣實例就能共享原型的屬性和方法。
1》原型具有動態性。在實例化后定義的原型方法,實例也能調用。

2》原型的簡單寫法。

可以將原型簡寫如上,但是這種寫法實際上是重新寫了原型,新原型的constructor已經改變,指向object。所以可以重新設置constructor。
而且如果在實例化后重寫原型,則已經實例的對象依舊訪問原來原型對象,不能訪問新原型的方法和屬性。

組合使用構造函數模式和原型模式

===繼承===

繼承:利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。

1.原型鏈繼承

包含引用類型值的原型屬性會被所有實例共享;而 這也正是為什么要在構造函數中,而不是在原型對象中定義屬性的原因。在通過原型來實現繼承時,原型實際上會變成另一個類型的實例。于是,原先的實例屬性也就順理成章地變成了現在的原型屬性了。
原型鏈的問題是:由于原型中包含引用類型值所帶來的問題。和在創建子類型的實例時,不能向超類型的構造函數中傳遞參數。實際上,應該說是沒有辦法在不影響所有對象實例的情況下,給超類型的構造函數傳遞參數。實踐中很少會多帶帶使用原型鏈。

2.構造函數繼承

借用構造函數:別忘了,函數只不過是在特定環境中執行代碼的對象, 因此通過使用 apply()和 call()方法也可以在(將來)新創建的對象上執行構造函數。

借用構造函數的問題
如果僅僅是借用構造函數,那么也將無法避免構造函數模式存在的問題——方法都在構造函數中定 義,因此函數復用就無從談起了。而且,在超類型的原型中定義的方法,對子類型而言也是不可見的,結 果所有類型都只能使用構造函數模式。考慮到這些問題,借用構造函數的技術也是很少多帶帶使用的。

組合繼承

組合繼承避免了原型鏈和借用構造函數的缺陷,融合了它們的優點,成為 JavaScript 中最常用的繼 承模式。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105307.html

相關文章

  • 體驗javascript之美6:如果你覺得什么都會了或者不知道js學什么了看這里-面向對象編程

    摘要:面向過程函數式編程面向對象編程第二個并不是大家理解的那樣,我們先說舉個現實例子就明白了。多說一句函數是編程是非常強大也是我最喜歡的,以后再說,我們先說面向對象編程。 概述 當大家已經把js的語言基礎理解了,然后能夠寫出一些簡單的例子了,這個時候基本上達到了一年工作經驗的水平,而自己能夠獨立的寫一些小功能,完成一些小效果,或者臨摹修改一些比較復雜的插件的時候差不多就是兩年工作經驗的水平,...

    changfeng1050 評論0 收藏0
  • js面向對象編程的理解

    摘要:構造函數對象初始化的瞬間被調用的方法。接下來看下自己做的一個小例子面向對象編程大家好這是一輛它的顏色是它的內飾是牧馬人越野車綠色的簡約精致的法拉利跑車紅色的豪華舒暢的效果圖注構造函數始終都應該以一個大寫字母開頭。 js的面向對象編程的理解 面向對象的語言有一個標志,即擁有類的概念,抽象實例對象的公共屬性與方法,基于類可以創建任意多個實例對象,一般具有封裝、繼承、多態的特性!但JS中對象...

    wuaiqiu 評論0 收藏0
  • 解決js面向對象編程的難題

    摘要:一面向對象編程簡介定義,簡稱,是一種程序設計思想。好處維護簡單模塊化是面向對象編程中的一個特征。可擴充性面向對象編程從本質上支持擴充性。 一、面向對象編程簡介 1.定義: Object Oriented Programming,簡稱OOP,是一種程序設計思想。OOP把對象作為程序的基本單元,一個對象包含了數據和操作數據的函數。 2.好處: (1)、維護簡單:模塊化是面向對象編程中的一個...

    ermaoL 評論0 收藏0
  • JS中的面向對象編程

    摘要:一面向對象編程面向對象編程是一種抽象方式創建模型的編程方式。繼承我們實現一個子類,繼承汽車類將類的屬性和方法賦值給繼承汽車類的原型鏈創建子類實例以上是中的面向對象編程的簡單介紹,如有錯誤,歡迎指出。 一.面向對象編程面向對象編程(OOP--Object Oriented Programming)是一種抽象方式創建模型的編程方式。繼承,封裝,多態是OOP的三大基本特征。許多主流編程語言都...

    lunaticf 評論0 收藏0

發表評論

0條評論

zeyu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<