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

資訊專欄INFORMATION COLUMN

JavaScript深入理解對象方法——Object.defineProperties()

jk_v1 / 1225人閱讀

摘要:方法直接在一個對象上定義新的屬性或修改現有屬性,并返回該對象。默認為當且僅當在枚舉相應對象上的屬性時該屬性顯現。函數返回值將被用作屬性的值。默認為返回值傳遞給函數的對象。

Object.defineProperties()

Object.defineProperties() 方法直接在一個對象上定義新的屬性或修改現有屬性,并返回該對象。

語法

Object.defineProperties(obj, props)

參數

obj
在其上定義或修改屬性的對象。

props
要定義其可枚舉屬性或修改的屬性描述符的對象。對象中存在的屬性描述符主要有兩種:數據描述符和訪問器描述符(更多詳情,請參閱Object.defineProperty())。描述符具有以下鍵:

configurable
true 當且僅當該屬性描述符的類型可以被改變并且該屬性可以從對應對象中刪除。默認為 false

enumerable
true 當且僅當在枚舉相應對象上的屬性時該屬性顯現。默認為 false

value
與屬性關聯的值??梢允侨魏斡行У腏avaScript值(數字,對象,函數等)。默認為 undefined.

writable
true當且僅當與該屬性相關聯的值可以用assignment operator改變時。默認為 false

get
作為該屬性的 getter 函數,如果沒有 getter 則為undefined。函數返回值將被用作屬性的值。默認為 undefined

set
作為屬性的 setter 函數,如果沒有 setter 則為undefined。函數將僅接受參數賦值給該屬性的新值。默認為 undefined

返回值

傳遞給函數的對象。

描述

Object.defineProperties本質上定義了obj 對象上props的可枚舉屬性相對應的所有屬性。

例子
var obj = {};
Object.defineProperties(obj, {
  "property1": {
    value: true,
    writable: true
  },
  "property2": {
    value: "Hello",
    writable: false
  }
  // etc. etc.
});
Polyfill

假設一個原始的執行環境,所有的名稱和屬性都引用它們的初始值,Object.defineProperties幾乎完全等同于(注意isCallable中的注釋)以下JavaScript中的重新實現:

function defineProperties(obj, properties) {
  function convertToDescriptor(desc) {
    function hasProperty(obj, prop) {
      return Object.prototype.hasOwnProperty.call(obj, prop);
    }

    function isCallable(v) {
      // NB: modify as necessary if other values than functions are callable.
      return typeof v === "function";
    }

    if (typeof desc !== "object" || desc === null)
      throw new TypeError("bad desc");

    var d = {};

    if (hasProperty(desc, "enumerable"))
      d.enumerable = !!desc.enumerable;
    if (hasProperty(desc, "configurable"))
      d.configurable = !!desc.configurable;
    if (hasProperty(desc, "value"))
      d.value = desc.value;
    if (hasProperty(desc, "writable"))
      d.writable = !!desc.writable;
    if (hasProperty(desc, "get")) {
      var g = desc.get;

      if (!isCallable(g) && typeof g !== "undefined")
        throw new TypeError("bad get");
      d.get = g;
    }
    if (hasProperty(desc, "set")) {
      var s = desc.set;
      if (!isCallable(s) && typeof s !== "undefined")
        throw new TypeError("bad set");
      d.set = s;
    }

    if (("get" in d || "set" in d) && ("value" in d || "writable" in d))
      throw new TypeError("identity-confused descriptor");

    return d;
  }

  if (typeof obj !== "object" || obj === null)
    throw new TypeError("bad obj");

  properties = Object(properties);

  var keys = Object.keys(properties);
  var descs = [];

  for (var i = 0; i < keys.length; i++)
    descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);

  for (var i = 0; i < descs.length; i++)
    Object.defineProperty(obj, descs[i][0], descs[i][1]);

  return obj;
}

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

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

相關文章

  • 深入理解JavaScript中的屬性和特性

    摘要:深入理解中的屬性和特性中屬性和特性是完全不同的兩個概念,這里我將根據自己所學,來深入理解中的屬性和特性。其中第三個參數描述符對象是對象字面量的方法創建的,里面的屬性和屬性值實際上保存的是要修改的特性和特性值。 深入理解JavaScript中的屬性和特性   JavaScript中屬性和特性是完全不同的兩個概念,這里我將根據自己所學,來深入理解JavaScript中的屬性和特性。   主...

    VPointer 評論0 收藏0
  • JavaScript深入理解對象方法——Object.create()

    摘要:語法新創建對象的原型對象。返回值在指定原型對象上添加新屬性后的對象。例外如果參數不是或一個對象,則拋出一個異常。是在引入的,且可用。請注意,盡管在中支持設置為為,但因為那些以前版本限制,此無法支持該特性。 Object.create() Object.create() 方法會使用指定的原型對象及其屬性去創建一個新的對象。 語法 Object.create(proto[, propert...

    melody_lql 評論0 收藏0
  • 深入理解ES6筆記(六)Symbol與Symbol屬性

    摘要:先搜索全局符號注冊表,如果已有,則返回這個已存在的符號值否則,會創建一個新的符號值,并使用該鍵值將其記錄到全局符號注冊表中,然后返回這個新的符號值。 主要知識點:創建符號值、使用符號值、共享符號值、符號值轉換。檢索符號值屬性以及知名符號 showImg(https://segmentfault.com/img/bVbfWhK?w=1203&h=633); 《深入理解ES6》筆記 目錄 ...

    crossea 評論0 收藏0
  • javascript 面向對象版塊之定義多個對象屬性以及讀取屬性特性

    摘要:返回值是一個對象,如果是訪問器屬性,這個對象的屬性有和如果是數據屬性,這個對象的屬性有和。上一篇面向對象版塊之對象屬性下一篇面向對象版塊之創建對象 這是 javascript 面向對象版塊的第三篇文章,主要講解的是多個屬性的定義以及讀取屬性的特性。前面這幾章內容目的在于加深對對象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識,或者你也可以了解一下不一樣的 javascript ...

    wendux 評論0 收藏0
  • 深入了解JavaScript對象(2)--函數、對象

    摘要:屬性是函數獨有的,表明該對象可以被執行。李四張三張三李四李四李四張三屬性探測由于屬性可以在任何時候添加,所以有時候就有必要檢查對象是否已有一個屬性。張三屬性特征通過方法來改變屬性特征。 1.[[Call]]屬性是函數獨有的,表明該對象可以被執行。由于僅函數擁有該對象,ECMAScript定義typeof操作符對任何具有[[Call]]屬性的對象返回function。 注:某些瀏覽器曾經...

    darkerXi 評論0 收藏0

發表評論

0條評論

jk_v1

|高級講師

TA的文章

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