摘要:通過創建的對象使用構造函數的屬性作為它們的原型。通過內置構造函數比如和創建的對象包含類屬性,它與構造函數名稱相匹配。這是客戶端宿主對象定義一個自定義構造函數可擴展性對象的可擴展性表示是否可以給對象添加新屬性。
對象的三個屬性
每個對象都擁有三個特性(屬性)(object attribute):
對象的原型(prototype)。指向另外一個對象,本對象的屬性繼承自它的原型對象。
對象的類(class)。是一個表示對象類型的字符串。
對象的擴展標記(extensible flag)。指明了(在ES5中)是否可以向該對象添加新屬性。
原型屬性【01】對象的原型屬性是用來繼承屬性的。
【02】我們經常把“對象的原型屬性”直接叫做“對象的原型”。
【03】原型屬性是在對象創建之初就設置好的。
通過對象直接量創建的對象使用Object.prototype作為它們的原型。
通過new創建的對象使用構造函數的prototype屬性作為它們的原型。
通過Object.create()創建的對象使用第一個參數(也可以是null)作為它們的原型。
【04】在ES5中,Object.getPrototypeOf(obj)可以查詢它的原型。
并不能直接通過對象實例.prototype屬性的形式訪問到對象的原型。
不能在對象實例的prototype上添加屬性和方法。
比如:
類屬性【01】ES3和ES5都未提供設置這個屬性的方法,并只有一種間接的方法可以查詢它。
【02】要想獲得對象的類,可以調用對象的toString()方法,然后提取已返回字符串的第8個到倒數第二個位置之間的字符。
默認的toString()方法(繼承自Object.prototype)返回了如下這種格式的字符串:
[object class]
很多對象繼承的toString()方法重寫了,為了能調用正確的toString()版本,必須間接地調用Function.call()方法。
【03】
通過內置構造函數(比如Array和Date)創建的對象包含“類屬性”(class attribute),它與構造函數名稱相匹配。(疑惑)
宿主對象也包含有意義的“類屬性”,但這和具體的JS實現有關。
對象的4種創建方式創建的對象的類屬性都是“Object”。
【04】classof()函數,可以返回任何類型任意對象的類:
function classof(o) { if (o === null) return "Null"; if (o === undefined) return "Undefined"; return Object.prototype.toString.call(o).slice(8,-1); }
數字、字符串和布爾值可以直接調用toString()方法,就和對象調用toString()方法一樣
這些類型的變量調用toString()方法,而不是通過它們的直接量調用toString(),比如1.toString()是不對的,而是要先聲明變量var a=1;然后調用a.toString()。
classof(null) // => "Null" classof(1) // => "Number" classof("") // => "String" classof(false) // => "Boolean" classof({}) // => "Object" classof([]) // => "Array" classof(/./) // => "Regexp" classof(new Date()) // => "Date" classof(window) // => "Window"(這是客戶端宿主對象) function f() {}; // 定義一個自定義構造函數 classof(new f()); // => "Object"可擴展性
【01】對象的可擴展性表示是否可以給對象添加新屬性。
可擴展屬性的目的是將對象“鎖定”,以避免外界的干擾。
【02】所有內置對象和自定義對象都是顯式可擴展的,除非將它們轉換為不可擴展的,宿主對象(BOM,DOM)的可擴展性是由JS引擎定義的。
【03】如果給一個不可擴展的對象的原型添加屬性,這個不可擴展的對象同樣會繼承這些新屬性。
(zyx456:原型添加屬性,繼承原型的對象也自動獲取這些新屬性,即使該對象為不可擴展性)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106330.html
摘要:類型描述類型對象是所有其他類型對象的父級使用創建對象表示使用構造函數方式創建一個空對象顯示可以根據一個給定值創建一個對應類型的對象創建一個類型的對象顯示啊哈哈創建一個類型的對象顯示啊哈哈屬性描述符表示對象的屬性或方法的內部數據結構用于描述對 Object類型 描述 object類型對象是所有其他類型對象的父級 使用Object創建對象 /* 表示使用構造函數方式創建一個空對象 */ v...
摘要:下面是我試圖解釋中三個點的作用。可以將這種傳播視為逐個提取所有單個屬性并將它們傳遞給新對象。這意味著下面的代碼將導致您擁有包含重復元素的數組。這應該是您需要了解的所有內容,以便在中使用運算符。 這篇文章的標題來自我在Quora上被要求回答的一個問題。下面是我試圖解釋JavaScript中三個點的作用。希望這對于將來有相同問題的人來說可以消除圍繞這個概念的迷霧。 數組/對象擴展運算符 假...
摘要:下面是我試圖解釋中三個點的作用??梢詫⑦@種傳播視為逐個提取所有單個屬性并將它們傳遞給新對象。這意味著下面的代碼將導致您擁有包含重復元素的數組。這應該是您需要了解的所有內容,以便在中使用運算符。 這篇文章的標題來自我在Quora上被要求回答的一個問題。下面是我試圖解釋JavaScript中三個點的作用。希望這對于將來有相同問題的人來說可以消除圍繞這個概念的迷霧。 數組/對象擴展運算符 假...
摘要:下面是我試圖解釋中三個點的作用??梢詫⑦@種傳播視為逐個提取所有單個屬性并將它們傳遞給新對象。這意味著下面的代碼將導致您擁有包含重復元素的數組。這應該是您需要了解的所有內容,以便在中使用運算符。 這篇文章的標題來自我在Quora上被要求回答的一個問題。下面是我試圖解釋JavaScript中三個點的作用。希望這對于將來有相同問題的人來說可以消除圍繞這個概念的迷霧。 數組/對象擴展運算符 假...
摘要:為要檢測的對象構造函數創建的對象繼承了一個叫的屬性,該屬性指代該構造函數,即的原型。使用直接量創建的對象,也有一個叫的屬性,該屬性指代構造函數,所以直接量創建的對象的真正原型是,使用方法來檢測對象的原型并不可靠,在以后的文章中會提到。 一、原型屬性 1、對象的原型屬性是用來繼承屬性的,這個屬性如此重要,我們通常稱為:對象的原型屬性或對象的原型。對象的原型是在對象實例化的時候就設置好的...
閱讀 1128·2021-11-19 09:40
閱讀 975·2021-11-12 10:36
閱讀 1271·2021-09-22 16:04
閱讀 3114·2021-09-09 11:39
閱讀 1273·2019-08-30 10:51
閱讀 1891·2019-08-30 10:48
閱讀 1230·2019-08-29 16:30
閱讀 475·2019-08-29 12:37