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

首頁 > 語言 > JavaScript > 正文

JavaScript 對象、函數和繼承

2024-05-06 14:14:58
字體:
來源:轉載
供稿:網友
1、 Javascript中的對象
  JavaScript可以說是一個基于對象的編程語言,為什么說是基于對象而不是面向對象,因為JavaScript自身只實現了封裝,而沒有實現繼承和多態。既然他是基于對象的,那么我們就來說說js中的對象。有人說js中所有的都是對象,這句話不完全正確。正確的一方是他強調了對象在js中的重要性,對象在js中無處不在,包括可以構造對象的函數本身也是對象。但是另一方面,js中也有一些簡單的數據類型,包括數字、字符串和布爾值、null值和undefined值,而這些不是對象。那為什么這些類型的值不是對象呢,畢竟他們也有方法。那讓我們來看一下,JavaScript中對于對象的定義,有兩種定義。
  (1)JavaScript中的對象是可變的鍵控集合(keyed collections) (此定義來自老道的那本書的第三章)
  (2)JavaScript中的對象是無序(unordered)的屬性集合,這些屬性可以含有簡單的數據類型、對象、函數;保存在一個對象屬性中的函數也被稱為這個對象的方法。 (來自ECMA-262 的4.3.3)(注:這里所說的屬性是可以在js腳本中創建和訪問的(我們稱之為顯性屬性),不包括系統為對象自動分配的內部屬性)
  那為什么那個簡單的數據類型不是對象呢,主要是因為這些數據類型的值中擁有的方法是不可變的,而一個對象的屬性是應當可以被改變的。
  2、 對象中的原型鏈[[proto]]
  JavaScript中的每個對象創建的時候系統都會自動為其分配一個原型屬性[[proto]],用來連接到他的原型對象。在JavaScript中就是通過每個對象中的[[proto]]來實現對象的繼承關系的。但是對象的[[proto]]屬性在JavaScript是不能訪問和修改的,他是作為一個內部的屬性存在的,而且是在對象被創建的同時由系統自動設定的。
  當訪問一個對象的某一屬性,如果這個屬性在此對象中不存在,就在他的[[proto]]所指的原型對象的屬性中尋找,如果找到則返回,否則繼續沿著[[proto]]鏈一直找下去,直到[[proto]]的連接為null的時候停止。
  3、 函數也是對象
  JavaScript中的函數本身就是一個對象(所以我們經常稱之為函數對象),而且可以說他是js中最重要的對象。之所以稱之為最重要的對象,一方面他可以扮演像其他語言中的函數同樣的角色,可以被調用,可以被傳入參數;另一方面他還被作為對象的構造器(constructor)來使用,可以結合new操作符來創建對象。
  既然函數就是對象,所以必然含有對象擁有的全部性質,包括對象在創建時設定的原型鏈[[proto]]屬性。
  讓我們來看看函數對象和普通對象有什么區別。我們前面說過,對象就是無序的屬性集合,那么函數的屬性和普通對象的屬性有什么不同呢。根據ECMA-262中的13.2節所述,在函數對象創建時,系統會默認為其創建兩個屬性[[call]]和[[constructor]],當函數對象被當做一個普通函數調用的時候(例如myFunc()),“()”操作符指明函數對象的[[call]]屬性就被執行,當他被當做一個構造器被調用的時候(例如new myConst()),他的[[constructor]]屬性就被執行,[[cosntructor]]的執行過程我們將在下一節中介紹。除此之外,當一個函數被創建時,系統會默認的再為其創建一個顯示屬性prototype,并為其賦值為
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 弥勒县| 高台县| 五大连池市| 玉树县| 阳春市| 陆河县| 茂名市| 临安市| 梁河县| 太仆寺旗| 夏河县| 镇远县| 宝丰县| 灵台县| 昭平县| 三原县| 泰宁县| 于都县| 孟津县| 邵阳县| 凤台县| 河间市| 旬阳县| 赣州市| 肇州县| 唐海县| 玛沁县| 汪清县| 西昌市| 中阳县| 甘肃省| 台安县| 桃源县| 昌黎县| 东乌珠穆沁旗| 石台县| 北辰区| 越西县| 松原市| 嘉黎县| 康平县|