摘要:創建對象創建一個普通對象創建一個沒有原型的新對象不繼承任何屬性和方法返回對象中可枚舉的自我屬性的名稱的數組返回對象中所有自我屬性的名稱的數組屬性的特性屬性有兩種特性數據屬性和存取器屬性數據屬性存取器屬性可以獲得某個對象特定自有屬性的屬性描述
Object.create(o)
創建對象
Object.create({x: 1}) //創建一個普通對象 Object.create(null) //創建一個沒有原型的新對象, 不繼承任何屬性和方法Object.keys(o)
返回對象中可枚舉的自我屬性的名稱的數組
Object.getOwnPropertyNames(o)返回對象中所有自我屬性的名稱的數組
屬性的特性屬性有兩種特性, 數據屬性和存取器屬性
數據屬性: {value: , writable, enumerable, configurable}
存取器屬性: {get: , set, enumerable, configurable}
可以獲得某個對象特定自有屬性的屬性描述符
Object.getOwnPropertyDescriptor({x:1}, "x") ==> Object {value: 1, writable: true, enumerable: true, configurable: true}
若想要獲取繼承屬性的屬性描述符, 需要遍歷原型鏈(Object.getProtytypeOf())
Object.definePropertyObject.defineProperty({}, "x", { value: 1, //值 writable: true, enumerable: true, configurable: true } Object.defineProperty({}, { x: { value: 1, writable: true, enumerable: true, configurable: true}, x: { value: 2, writable: true, enumerable: true, configurable: true}, r: { get: function() { return Math.max(this.x, this.y)}, enumerable: true, configurable: true } })
configuration = false 時為 不可配置
如果存取器屬性是不可配置的, 則不能修改get和set, 也不能轉換為數據屬性
如果數據屬性是不可配置的, 則不能轉換為存取器屬性
如果數據屬性是不可配置的, 則不能將writable從false->true, 但是可以從true->false
如果數據屬性是不可配置且為可寫時, 則不能修改它的值, 然而可配置但不可寫時, 值是可以修改的(實際上是先把可寫性轉成true, 修改值后, 再改為false)
完整復制屬性特性的extend方法
Object.defineProperty(Object.prototype, "extend", { writable: true, enumerable: false, configurable: true, value: function(o){ //獲取所有可枚舉的自有屬性 var names = Object.getOwnPropertyNames(o); for(var i = 0; i < names.length; i++){ if (names[i] in this) continue; //獲取屬性描述符 var desc = Object.getOwnPropertyDescriptor(o, names[i]); //定義屬性 Object.defineProperty(this, names[i], desc); } } } );
注:
ECMAScript 5 之前的非標準方法
lookupGetter
lookupSetter
defineGetter
defineSetter
查詢原型
注: Firefox, Safari和Chrome支持__proto__查詢, IE和Opera不支持
判斷對象是否是可擴展的
Object.preventExtensions(o)把對象轉為不可擴展的
Object.seal(o)在preventExtensions的基礎上, 將所有自有屬性設置為不可配置的,即不能添加新屬性, 且不能改已有屬性, 可以用Object.isSealed來檢測
Object.freeze(o)對象凍結, 在seal的基礎上, 將自有的所有數據屬性設置為只讀, 可以用Object.isFrozen()來檢測
Object.assign淺層復制, 主要用于對象的擴展
Object.prototype一般只有function對象擁有prototype屬性
__proto__是原型鏈的實際指針
// 原型鏈的頂端 log((Object.prototype).__proto__); // null log(Function.prototype.__proto__ == Object.prototype); // true log(Object.__proto__ == Function.prototype); // true log(Function.__proto__ == Function.prototype); // true log(Array.__proto__ == Function.prototype); // true log(Company.__proto__ == Function.prototype); // true log(Object.__proto__ == Function.prototype); // true log(Company.prototype.__proto__ == Object.prototype); // true log(c1.__proto__ == Company.prototype); // true 數據摘自 http://2660311.blog.51cto.com/2650311/1358226/hasOwnProperty
用來檢測給定的名字是否是對象的自有屬性, 對于繼承的屬性將返回false.
var o = {x: 1} o.hasOwnProperty("x") // true: o有個自有屬性x o.hasOwnProperty("y") // false: o中不存在屬性y o.hasOwnProperty("toString") // false: toString是繼承屬性
in 可以區分不存在的屬性和存在但值為undefined的屬性
var o = {x: undefined} "x" in o // true, 屬性存在 "y" in o //false, 屬性不存在 delete o.x; "x" in o //false, 已刪除, 不存在propertyIsEnumerable
是hasOwnProperty的增加版, 只有檢測到是自有屬性且可枚舉(enumerable==true)時才返回true
var o = {x: 1} o.propertyIsEnumerable("x") //true Object.prototype.propertyIsEnumerable("toString") //false, 不可枚舉toString和toLocalString
通常來說, toLocalString會直接調用toString的值返回, 除了特殊的幾個對象外:
Date, Number 會做本地化的轉換
Array, Array在做toLocalString的時候會調每個元素的toLocalString, 而非toString
valueOf和toString方法非常類似, 只有當需要轉換成對象的某種原始值, 而非字符串時才會調用, 尤其是在Date和Number.
本文以學習為主, 主要資源來自于<
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86336.html
摘要:和的作用一樣,區別在于寫法語法對象對象作用判斷對象是否在對象的原型鏈上語法對象構造函數作用判斷構造函數的屬性是否在對象的原型鏈上,如果在,就返回屬性是否可枚舉用于檢查給定的屬性是否能夠使用語句。 ## javascript對象原型成員詳解 ## ECMAScript 中的對象就是一組數據和功能的集合,對象可以通過 new 操作符后跟要創建的對象名稱來...
摘要:數字和解釋因為沒有任何一個操作數是字符串,將轉換為一個數字做數字加法運算因為沒有操作數是對象或字符串,將轉換為。結論以避免潛在的問題,不使用加法運算符處理對象,除非你清楚地使用或方法。 前端學習:教程&模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試資源匯總 JavaScript一路走來,備受爭議,與其說它備受爭議,不如說它不夠完美。不夠完美?那完美了還得了,它的...
摘要:我們再來回顧下文首提出的這個比較運算,首先為對象,則調用函數將其轉化為字符串對于右側的,首先會進行顯式類型轉換,將其轉化為。 JavaScript 運算符規則與隱式類型轉換詳解 從屬于筆者的現代 JavaScript 開發:語法基礎與工程實踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運算中的規則與隱式類型轉換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:我們再來回顧下文首提出的這個比較運算,首先為對象,則調用函數將其轉化為字符串對于右側的,首先會進行顯式類型轉換,將其轉化為。 JavaScript 運算符規則與隱式類型轉換詳解 從屬于筆者的現代 JavaScript 開發:語法基礎與工程實踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運算中的規則與隱式類型轉換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:原文地址詳解的類博主博客地址的個人博客從當初的一個彈窗語言,一步步發展成為現在前后端通吃的龐然大物。那么,的類又該怎么定義呢在面向對象編程中,類是對象的模板,定義了同一組對象又稱實例共有的屬性和方法。這個等同于的屬性現已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類 博主博客地址:Damonare的個人博客 ??Javascript從當初的一個彈窗語言,一...
閱讀 2908·2021-11-22 13:54
閱讀 3544·2021-11-16 11:44
閱讀 1382·2021-09-07 10:19
閱讀 1483·2019-08-29 17:30
閱讀 3207·2019-08-29 11:33
閱讀 3555·2019-08-26 12:18
閱讀 2895·2019-08-26 11:53
閱讀 1348·2019-08-26 10:47