中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript中的Object對象學(xué)習(xí)教程
來源:易賢網(wǎng) 閱讀:1037 次 日期:2016-06-25 14:39:14
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript中的Object對象學(xué)習(xí)教程”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了JavaScript中的Object對象學(xué)習(xí)教程,是JavaScript入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

參數(shù):

(1)obj

必需。Object 對象分配到的變量名稱。  

(2)值

可選。任一 JavaScript 基元數(shù)據(jù)類型(數(shù)字、布爾值或字符串)。  如果值是一個(gè)對象,則返回的對象是未修改的。  如果值是 null、“未定義”或“未提供”,則創(chuàng)建無內(nèi)容的對象。 

Object對象的方法

Object作為構(gòu)造函數(shù)使用時(shí),可以接受一個(gè)參數(shù)。如果該參數(shù)是一個(gè)對象,則直接返回這個(gè)對象;如果是一個(gè)原始類型的值,則返回該值對應(yīng)的包裝對象。利用這一點(diǎn),可以寫一個(gè)判斷變量是否為對象的函數(shù)。

function isObject(value) {

 return value === Object(value);

}

要在Object對象上面部署一個(gè)方法,有兩種做法。

部署在Object對象本身

部署在Object.prototype對象

Object.keys方法和Object.getOwnPropertyNames方法很相似,一般用來遍歷對象的屬性。它們的參數(shù)都是一個(gè)對象,都返回一個(gè)數(shù)組,該數(shù)組的成員都是對象自身的(而不是繼承的)所有屬性名。兩者區(qū)別在于,前者只返回可枚舉的屬性,后者還返回不可枚舉的屬性名。由于數(shù)組存在不可枚舉屬性length,因此一般使用Object.keys遍歷數(shù)組。

JavaScript沒有提供計(jì)算對象屬性個(gè)數(shù)的方法,可通過 Object.keys(o).length 和 Object.getOwnPropertyNames(o).length 獲取。

Object.observe方法用于觀察對象屬性的變化。

原型鏈相關(guān)方法:

Object.create():生成一個(gè)新對象,并該對象的原型。

Object.getPrototypeOf():獲取對象的Prototype對象。

Object實(shí)例對象的方法

Object.prototype.valueOf():valueOf方法的作用是返回一個(gè)對象的值,默認(rèn)情況下返回對象本身。該方法的主要用途是,JavaScript自動類型轉(zhuǎn)換時(shí)會默認(rèn)調(diào)用這個(gè)方法。

Object.prototype.toString():toString方法的作用是返回一個(gè)對象的字符串形式。當(dāng)對象用于字符串加法時(shí),會自動調(diào)用toString方法。

使用call方法,可以在任意值上調(diào)用Object.prototype.toString方法,從而判斷這個(gè)值的類型。不同數(shù)據(jù)類型的toString方法返回值如下:

數(shù)值:返回[object Number]

字符串:返回[object String]

布爾值:返回[object Boolean]

undefined:返回[object Undefined]

null:返回[object Null]

對象:返回”[object “ + 構(gòu)造函數(shù)的名稱 + “]”

Object.prototype.toString.call(2) // "[object Number]"

Object.prototype.toString.call('') // "[object String]"

利用這個(gè)特性,可寫出一個(gè)比typeof運(yùn)算符更準(zhǔn)確的類型判斷函數(shù)。

var type = function (o){

 var s = Object.prototype.toString.call(o);

 return s.match(/\[object (.*?)\]/)[1].toLowerCase();

};

type({}); // "object"

type([]); // "array"

type(5); // "number"

在上面這個(gè)type函數(shù)的基礎(chǔ)上,還可以加上專門判斷某種類型數(shù)據(jù)的方法。

['Null', 'Undefined', 'Object', 'Array', 'String', 'Number',

'Boolean', 'Function', 'RegExp', 'Element', 'NaN', 'Infinite'

].forEach(function (t) {

 type['is' + t] = function (o) {

  return type(o) === t.toLowerCase();

 };

});

type.isObject({}); // true

type.isNumber(NaN); // false

type.isElement(document.createElement('div')); // true

對象的屬性模型

在JavaScript內(nèi)部,每個(gè)屬性都有一個(gè)對應(yīng)的attributes對象,保存該屬性的一些元信息。使用Object.getOwnPropertyDescriptor方法,可讀取o對象的p屬性的attributes對象。attributes對象包含如下元信息:

value:表示該屬性的值,默認(rèn)為undefined(只要writable和configurable有一個(gè)為true,就可以改動)。

writable:表示該屬性的值(value)是否可以改變,默認(rèn)為true。

enumerable: 表示該屬性是否可枚舉,默認(rèn)為true,也就是該屬性會出現(xiàn)在for…in和Object.keys()等操作中。一般來說,系統(tǒng)原生的屬性(即非用戶自定義的屬性)都是不可枚舉的。

表示“可配置性”,默認(rèn)為true。如果設(shè)為false,表示無法刪除該屬性,也不得改變attributes對象(value屬性除外,如果writable為true,仍可改變value),也就是configurable屬性控制了attributes對象的可寫性。

表示該屬性的取值函數(shù)(getter),默認(rèn)為undefined。

表示該屬性的存值函數(shù)(setter),默認(rèn)為undefined。

var o = { p: 'a' };

Object.getOwnPropertyDescriptor(o, 'p');

// Object {

//  value: "a",

//  writable: true,

//  enumerable: true,

//  configurable: true

// }

Object.defineProperty方法允許通過定義attributes對象,來定義或修改一個(gè)屬性,然后返回修改后的對象。格式如下:

Object.defineProperty(object, propertyName, attributesObject)

Object.defineProperty方法接受三個(gè)參數(shù),第一個(gè)是屬性所在的對象,第二個(gè)是屬性名(它應(yīng)該是一個(gè)字符串),第三個(gè)是屬性的描述對象。通過此方法定義屬性,屬性對象的writable、configurable、enumerable三個(gè)屬性的默認(rèn)值都為false。

Object.defineProperty(o, "p", {

 value: "bar"

});

Object.getOwnPropertyDescriptor(o, 'p');

// Object {

//  value: "bar",

//  writable: false,

//  enumerable: false,

//  configurable: false

// }

如果一次性定義或修改多個(gè)屬性,可以使用Object.defineProperties方法。需要注意的是,一旦定義了取值函數(shù)get(或存值函數(shù)set),就不能將writable設(shè)為true,或者同時(shí)定義value屬性,否則會報(bào)錯(cuò)。

var o = Object.defineProperties({}, {

 p1: {value: 123, enumerable: true},

 p2: {value: "abc", enumerable: true},

 p3: {

  get: function () {

   return this.p1 + this.p2

  },

  enumerable: true,

  configurable: true

 }

});

enumerable可以用來設(shè)置“秘密”屬性,如果一個(gè)屬性的enumerable為false,則 for..in 循環(huán)、Object.keys 方法和 JSON.stringify 方法都不會取到該屬性,但可以通過 o.xx 直接獲取它的值。

for…in循環(huán)和Object.keys方法的區(qū)別在于,前者包括對象繼承自原型對象的屬性,而后者只包括對象本身的屬性。如果需要獲取對象自身的所有屬性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法。

可配置性決定了一個(gè)變量是否可以被刪除(delete)。當(dāng)使用var命令聲明變量時(shí),變量的configurable為false,而不使用var命令聲明變量時(shí)(或者使用屬性賦值的方式聲明變量),變量的可配置性為true。這說明,delete只能刪除對象的屬性。

var a1 = 1; // configurable: false

a2 = 1; // configurable: true(等價(jià)于this.a2 = 1)

除了直接定義以外,屬性還可以用存取函數(shù)(accessor)定義。其中,存值函數(shù)稱為setter,使用set命令;取值函數(shù)稱為getter,使用get命令。利用存取函數(shù),可以實(shí)現(xiàn)數(shù)據(jù)對象與DOM對象的雙向綁定。

Object.defineProperty(user, 'name', {

 get: function () {

  return document.getElementById("foo").value

 },

 set: function (newValue) {

  document.getElementById("foo").value = newValue;

 },

 configurable: true

});

控制對象狀態(tài)

JavaScript提供了三種方法,精確控制一個(gè)對象的讀寫狀態(tài),防止對象被改變。最弱一層的保護(hù)是preventExtensions,其次是seal,最強(qiáng)的freeze。

Object.preventExtensions方法可以使得一個(gè)對象無法再添加新的屬性,但可以用delete命令刪除它的現(xiàn)有屬性。Object.isExtensible方法可以用來檢查是否可以為一個(gè)對象添加屬性。

Object.seal方法使得一個(gè)對象既無法添加新屬性,也無法刪除舊屬性。Object.seal還把現(xiàn)有屬性的attributes對象的configurable屬性設(shè)為false,使得attributes對象不再能改變。Object.isSealed方法用于檢查一個(gè)對象是否使用了Object.seal方法。

Object.freeze方法可以使得一個(gè)對象無法添加新屬性、無法刪除舊屬性、也無法改變屬性的值,使得這個(gè)對象實(shí)際上變成了常量。Object.isFrozen方法用于檢查一個(gè)對象是否使用了Object.freeze()方法。

使用上面這些方法鎖定對象的可寫性,但是依然可以通過改變該對象的原型對象,來為它增加屬性。

var o = new Object();

Object.preventExtensions(o);

var proto = Object.getPrototypeOf(o);

proto.t = "hello";

o.t

// hello

一種解決方案是,把原型也凍結(jié)住。

var o = Object.seal(

 Object.create(Object.freeze({x:1}),

   {y: {value: 2, writable: true}})

);

Object.getPrototypeOf(o).t = "hello";

o.t // undefined

PS:

Object 對象包含在所有其他 JavaScript 對象中;它的所有方法和屬性均可用于所有其他對象。  方法可在用戶定義的對象中進(jìn)行重新定義,并由 JavaScript 在適當(dāng)時(shí)間調(diào)用。   toString方法是頻繁重新定義的 Object 方法的一個(gè)示例。  

在此語言參考中,每個(gè) Object 方法的說明均包括內(nèi)部 JavaScript 對象的默認(rèn)和對象特定的實(shí)現(xiàn)信息。

IE兼容方面,微軟MSDN文檔的話是”已在 Internet Explorer 6 之前的 Internet Explorer 中引入 Object Object“,所以不用擔(dān)心~

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript中的Object對象學(xué)習(xí)教程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲国产激情| 欧美日韩一区二区三区免费| 一区二区av在线| 一本色道久久88精品综合| 亚洲影视在线播放| 久久久久久久波多野高潮日日| 欧美与欧洲交xxxx免费观看| 免费视频一区| 国产精品日韩精品欧美精品| 在线日韩av| 亚洲欧美在线免费| 毛片一区二区三区| 国产精品高清免费在线观看| 在线视频成人| 午夜精品久久久久久99热| 免费不卡欧美自拍视频| 国产日韩欧美不卡| 日韩亚洲成人av在线| 久久久五月天| 国产免费成人av| 亚洲精品日韩激情在线电影| 久久er精品视频| 欧美性猛交视频| 亚洲国产精品精华液2区45| 亚洲影院色无极综合| 欧美精品成人| 在线视频观看日韩| 久久久精品一区| 国产精品久久久久久久app| 亚洲国产精品成人| 欧美一级淫片aaaaaaa视频| 欧美日韩精品在线| 亚洲伦理在线免费看| 久久久精品免费视频| 国产精品亚洲激情| 亚洲一区网站| 国产精品扒开腿做爽爽爽软件| 亚洲电影免费观看高清| 久久精品盗摄| 国产欧美1区2区3区| 亚洲色图制服丝袜| 欧美日韩成人一区二区三区| 亚洲国产日韩一区| 老司机成人在线视频| 国内精品久久国产| 欧美一区二区三区在线观看| 国产精品美女一区二区在线观看| 99国产精品久久久久老师| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品一区在线播放| 一本色道婷婷久久欧美| 欧美精品国产精品| 亚洲欧洲三级电影| 欧美二区在线看| 91久久久久| 欧美精品色综合| 日韩一级精品| 欧美精品一区二区三区视频| 亚洲久久在线| 欧美日韩一区三区四区| 一本到12不卡视频在线dvd| 欧美日韩三级一区二区| 亚洲手机在线| 国产精品―色哟哟| 久久国产黑丝| 亚洲黄色免费| 国产精品videosex极品| 西西人体一区二区| 国内精品嫩模av私拍在线观看 | 亚洲尤物在线| 国产精品亚洲精品| 欧美在线高清视频| 亚洲成色www8888| 欧美日韩国产一区二区三区地区| 99www免费人成精品| 国产精品高潮呻吟久久av无限 | 激情五月婷婷综合| 欧美成人国产一区二区| 野花国产精品入口| 国产日韩精品一区| 欧美激情a∨在线视频播放| 99国产精品一区| 国产精品综合| 欧美成人精品在线| 亚洲欧美激情诱惑| 亚洲成色最大综合在线| 欧美喷水视频| 久久精品一区四区| 一区二区三区成人| 国内在线观看一区二区三区 | 国内成人精品视频| 欧美精品一区二区视频| 性欧美暴力猛交69hd| 亚洲福利视频网站| 国产精品视频免费| 欧美国产精品v| 欧美一区二区三区四区在线观看地址 | 亚洲乱码视频| 国产一区二区精品久久91| 欧美成人免费全部| 欧美一区二区大片| 一本大道久久a久久精品综合| 国产一区二区剧情av在线| 欧美日韩高清不卡| 老司机午夜精品| 亚洲欧美国产制服动漫| 亚洲精品一区二区三| 国产日韩在线视频| 国产精品扒开腿爽爽爽视频| 欧美成人精品高清在线播放| 久久精品卡一| 午夜一区二区三区在线观看| 99热免费精品在线观看| 亚洲第一久久影院| 国外成人网址| 国产香蕉久久精品综合网| 欧美视频在线观看视频极品| 欧美国产欧美综合| 欧美99久久| 老司机免费视频一区二区三区| 午夜精品久久久久久久99樱桃| 99re6这里只有精品视频在线观看| 在线不卡亚洲| 一区免费在线| 一区二区在线免费观看| 黄色亚洲精品| 激情欧美日韩| 黄色成人免费观看| 激情综合久久| 一区二区三区在线免费观看| 黑丝一区二区| 韩日精品视频| 激情久久综艺| 在线看国产日韩| 亚洲第一级黄色片| 亚洲国产精品一区二区www在线| 一区二区三区我不卡| 黄色成人在线网站| 亚洲成人直播| 91久久精品国产91性色tv| 亚洲国产欧美在线人成| 亚洲国产色一区| 亚洲三级免费电影| 99国产精品视频免费观看一公开 | 亚洲国产精品久久久久秋霞影院| 亚洲欧洲日产国码二区| 亚洲精品一区二区三区樱花| 亚洲国产婷婷| 99视频超级精品| 亚洲午夜久久久久久久久电影院| 亚洲午夜国产成人av电影男同| 亚洲一二三级电影| 欧美亚洲在线观看| 久久婷婷综合激情| 欧美激情在线免费观看| 欧美日韩综合精品| 国产精品久久婷婷六月丁香| 国产日韩精品在线播放| 好看的日韩视频| 亚洲人体1000| 亚洲在线第一页| 久久精品国产99| 欧美激情成人在线视频| 国产精品v一区二区三区| 国产视频久久| 亚洲欧洲精品天堂一级| 亚洲一区二区三区视频| 久久精品视频在线| 欧美经典一区二区三区| 国产精品青草久久| 黄色日韩精品| 一区二区三区色| 欧美主播一区二区三区美女 久久精品人 | 欧美日韩亚洲不卡| 国产欧美一区二区精品秋霞影院| 狠狠干综合网| 夜夜嗨av一区二区三区四区| 香蕉成人久久| 欧美二区在线| 国产欧美日韩综合| 亚洲精品网站在线播放gif| 亚洲欧美久久| 欧美激情综合在线| 国产视频欧美视频| 日韩一级免费观看| 久久久人成影片一区二区三区观看| 欧美日韩高清不卡| 激情综合网址| 午夜综合激情| 欧美日韩精品一区二区三区四区| 国产午夜精品一区理论片飘花| 亚洲乱码国产乱码精品精可以看| 欧美在线亚洲一区| 欧美午夜精品一区| 亚洲国产美女精品久久久久∴| 亚洲永久字幕| 欧美日韩伦理在线| 在线看片日韩| 久久精品导航| 国产美女一区|