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

資訊專欄INFORMATION COLUMN

Javascript Object方法詳解

sushi / 610人閱讀

摘要:創建對象創建一個普通對象創建一個沒有原型的新對象不繼承任何屬性和方法返回對象中可枚舉的自我屬性的名稱的數組返回對象中所有自我屬性的名稱的數組屬性的特性屬性有兩種特性數據屬性和存取器屬性數據屬性存取器屬性可以獲得某個對象特定自有屬性的屬性描述

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(o, prop)

可以獲得某個對象特定自有屬性的屬性描述符

Object.getOwnPropertyDescriptor({x:1}, "x")

==>

Object {value: 1, writable: true, enumerable: true, configurable: true}

若想要獲取繼承屬性的屬性描述符, 需要遍歷原型鏈(Object.getProtytypeOf())

Object.defineProperty
Object.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

Object.isPrototypeOf()

查詢原型
注: Firefox, Safari和Chrome支持__proto__查詢, IE和Opera不支持

Object.esExtensible(o)

判斷對象是否是可擴展的

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

valueOf和toString方法非常類似, 只有當需要轉換成對象的某種原始值, 而非字符串時才會調用, 尤其是在Date和Number.

本文以學習為主, 主要資源來自于<>

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

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

相關文章

  • javascript對象原型成員詳解

    摘要:和的作用一樣,區別在于寫法語法對象對象作用判斷對象是否在對象的原型鏈上語法對象構造函數作用判斷構造函數的屬性是否在對象的原型鏈上,如果在,就返回屬性是否可枚舉用于檢查給定的屬性是否能夠使用語句。 ## javascript對象原型成員詳解 ## ECMAScript 中的對象就是一組數據和功能的集合,對象可以通過 new 操作符后跟要創建的對象名稱來...

    zhkai 評論0 收藏0
  • 溫故js系列(17)-詳解加法運算符

    摘要:數字和解釋因為沒有任何一個操作數是字符串,將轉換為一個數字做數字加法運算因為沒有操作數是對象或字符串,將轉換為。結論以避免潛在的問題,不使用加法運算符處理對象,除非你清楚地使用或方法。 前端學習:教程&模塊化/規范化/工程化/優化&工具/調試&值得關注的博客/Git&面試資源匯總 JavaScript一路走來,備受爭議,與其說它備受爭議,不如說它不夠完美。不夠完美?那完美了還得了,它的...

    gxyz 評論0 收藏0
  • JavaScript 運算符規則與隱式類型轉換詳解

    摘要:我們再來回顧下文首提出的這個比較運算,首先為對象,則調用函數將其轉化為字符串對于右側的,首先會進行顯式類型轉換,將其轉化為。 JavaScript 運算符規則與隱式類型轉換詳解 從屬于筆者的現代 JavaScript 開發:語法基礎與工程實踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運算中的規則與隱式類型轉換;本文中涉及的參考資料全部聲明在了JavaSc...

    snifes 評論0 收藏0
  • JavaScript 運算符規則與隱式類型轉換詳解

    摘要:我們再來回顧下文首提出的這個比較運算,首先為對象,則調用函數將其轉化為字符串對于右側的,首先會進行顯式類型轉換,將其轉化為。 JavaScript 運算符規則與隱式類型轉換詳解 從屬于筆者的現代 JavaScript 開發:語法基礎與工程實踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運算中的規則與隱式類型轉換;本文中涉及的參考資料全部聲明在了JavaSc...

    Kyxy 評論0 收藏0
  • 詳解javascript的類

    摘要:原文地址詳解的類博主博客地址的個人博客從當初的一個彈窗語言,一步步發展成為現在前后端通吃的龐然大物。那么,的類又該怎么定義呢在面向對象編程中,類是對象的模板,定義了同一組對象又稱實例共有的屬性和方法。這個等同于的屬性現已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類 博主博客地址:Damonare的個人博客 ??Javascript從當初的一個彈窗語言,一...

    hufeng 評論0 收藏0

發表評論

0條評論

sushi

|高級講師

TA的文章

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