国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

深入理解JavaScrip t編程中的原型概念

2019-11-02 14:17:19
字體:
來源:轉載
供稿:網友

   這篇文章主要介紹了深入理解JavaScript編程中的原型概念,包括prototype屬性的使用等一些相關知識,需要的朋友可以參考下

  JavaScript 的原型對象總是讓人糾結。即使是經驗豐富的JavaScript專家甚至其作者,經常對這一概念給出很有限的解釋。我相信問題來自于我們對原型最早的認識。原型總是與new, constructor 以及令人困惑的prototype屬性緊密聯系。事實上,原型是一個相當簡單的概念。為了更好地理解它,我們需要忘記我們所‘學到'的構造原型,然后,追本溯源。

  什么是原型?

  原型是一個從其他對象繼承屬性的對象。

  是不是任何對象都可以是原型?

  是的

  那些對象有原型?

  每個對象都有一個默認的原型。原型本身就是對象,每一個原型本身也存在一個原型。(只有一個例外,默認的對象原型在每條原型鏈的頂端,其他的原型在原型鏈的后面)

  退一步說,什么又是對象呢?

  在JavaScript中一個對象是以鍵值對保存的任意的無序集合,如果它不是原始類(undefined,null,boolean.nuber或string),它就是一個對象。

  你可以認為每個對象都有一個prototype. 但當我寫({}).prototype的時候,我卻得到了undefined,你瘋不瘋?

  忘記你所掌握的關于prototype屬性的理解 - 這很可能是迷惑的根源. 一個對象真正的prototype是內部[[Prototype]]屬性. ECMA 5介紹了標準的訪問方法,Object.getPrototypeOf(object)。這個最新的實現已被Firefox, Safari, Chrome and IE9所支持. 另外,除了IE,所有的瀏覽器都支持非標準的訪問方法__proto__.不然的話,我們只能說對象的構造方法就是它的prototype屬性.

  ?

1 2 3 4 5 6 7 8 9 10 11 var a = {};   //Opera 或 IE<=8下失敗 Object.getPrototypeOf(a); //[object Object]   //IE下失敗 a.__proto__; //[object Object]   //所有瀏覽器 //(but only if constructor.prototype has not been replaced and fails with Object.create) a.constructor.prototype; //[object Object]

  很好, false 是原始類型, 為什么false.__proto__ 會返回一個值呢?

  當訪問原始類型的原型(prototype),它會強制轉化為一個對象。

  ?

1 2 //(works in IE<=8 too, due to double-negative) false.__proto__ === Boolean(false).__proto__; //true

  我想使用原型實現繼承,我現在該怎么做?

  給一個實例添加原型屬性,幾乎是沒有意義的.除非一種情況,那就是,很有效率的添加屬性直接到實例本身.假設我們已經有了一個對象,要共享已經存在的對象的功能.例如Array,我們可以這樣做

  ?

1 2 3 4 //fails in IE<=8 var a = {}; a.__proto_ = Array.prototype; a.length; //0

  但是我們可以看到原型的真正強大在于多個實例共享同一原型。原型對象的屬性只被定義一次就可以被它引用的所有實例所繼承。使用原型對性能和程序可維護性的提高效果是很顯而易見的。那么這就是構造函數產生的原因嗎?是的,構造函數提供了一個便捷的跨瀏覽器機制來實現對實例創建時的公用原型分配。。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 时尚| 屏东市| 若羌县| 虎林市| 黎川县| 化州市| 新疆| 山阴县| 来宾市| 若羌县| 姜堰市| 阜平县| 海宁市| 田阳县| 沿河| 桃园市| 剑川县| 景泰县| 临夏县| 云阳县| 依兰县| 正定县| 湛江市| 信阳市| 友谊县| 原阳县| 大化| 芷江| 福州市| 乌拉特中旗| 乌拉特后旗| 莒南县| 嘉荫县| 涟水县| 北票市| 沅陵县| 阿合奇县| 金湖县| 大同县| 绥芬河市| 开化县|