成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Javascript中的對(duì)象-Object

2shou / 2594人閱讀

摘要:返回當(dāng)前對(duì)象對(duì)應(yīng)的值。判斷當(dāng)前對(duì)象是否為另一個(gè)對(duì)象的原型。存取器新的值必須大于當(dāng)前值利用存取器,可以實(shí)現(xiàn)數(shù)據(jù)對(duì)象與對(duì)象的雙向綁定??刂茖?duì)象狀態(tài)提供了三種方法,精確控制一個(gè)對(duì)象的讀寫(xiě)狀態(tài),防止對(duì)象被改變。

Object對(duì)象的方法

當(dāng)Object 被作為工具方法,而不是構(gòu)造方法時(shí),

Object(arg):包裝方法,將非對(duì)象類(lèi)型包裝成一個(gè)對(duì)象

Object.create(proto[, propertiesObject]):

Object.getPrototypeOf(obj):

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

必須區(qū)分“構(gòu)造函數(shù)的方法”和“實(shí)例對(duì)象的方法”。

valueOf():返回當(dāng)前對(duì)象對(duì)應(yīng)的值。

toString():返回當(dāng)前對(duì)象對(duì)應(yīng)的字符串形式。
這個(gè)方法很有用,可以用于判斷對(duì)象類(lèi)型

toLocalString():返回當(dāng)前對(duì)象對(duì)應(yīng)的本地字符串形式。

hasOwnProperty():判斷某個(gè)屬性是否為當(dāng)前對(duì)象自身的屬性,還是繼承自原型對(duì)象的屬性。

isPrototypeOf():判斷當(dāng)前對(duì)象是否為另一個(gè)對(duì)象的原型。

propertyIsEnumerable():判斷某個(gè)屬性是否可枚舉。

對(duì)象的屬性模型

Object.getOwnPropertyDescriptor():獲取對(duì)象的屬性的精確描述模型

Object.defineProperty()
Object.defineProperties()
這兩個(gè)方法有性能損耗,會(huì)拖慢執(zhí)行速度,不宜大量使用。

可枚舉性(enumerable)

如果一個(gè)屬性的enumerable為false,下面三個(gè)操作不會(huì)取到該屬性。

for..in循環(huán)

Object.keys方法
JSON.stringify方法(有時(shí)可以利用這一點(diǎn),為對(duì)象添加注釋信息。)

因此,enumerable可以用來(lái)設(shè)置“秘密”屬性。
遍歷對(duì)象屬性方法

Object.keys()

Object.getOwnPropertyNames()
一般情況下,幾乎總是使用Object.keys方法,遍歷數(shù)組的屬性。

存取器
var o ={
  $n : 5,
  get next(){return this.$n++ },
  set next(n) {
    if (n >= this.$n) this.$n = n;
    else throw "新的值必須大于當(dāng)前值";
  }
};

o.next // 5

o.next = 10;
o.next // 10

利用存取器,可以實(shí)現(xiàn)數(shù)據(jù)對(duì)象與DOM對(duì)象的雙向綁定。

對(duì)象拷貝

對(duì)于簡(jiǎn)單屬性,就直接拷貝,對(duì)于那些通過(guò)描述對(duì)象設(shè)置的屬性,則使用Object.defineProperty方法拷貝。

var extend = function (to, from) {
  var descriptor = Object.getOwnPropertyDescriptor(from, property);

  if (descriptor && ( !descriptor.writable
    || !descriptor.configurable
    || !descriptor.enumerable
    || descriptor.get
    || descriptor.set)) {
    Object.defineProperty(to, property, descriptor);
  } else {
    to[property] = from[property];
  }
}
控制對(duì)象狀態(tài)

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

不可擴(kuò)展對(duì)象(不能加,可改,可刪)

Object.preventExtensions方法可以使得一個(gè)對(duì)象無(wú)法再添加新的屬性。可以用delete命令刪除它的現(xiàn)有屬性。
判斷: Object.isExtensible(obj);

密封的對(duì)象(不能加,刪,可改)

Object.seal方法使得一個(gè)對(duì)象既無(wú)法添加新屬性,也無(wú)法刪除舊屬性。

判斷: Object.isSealed(obj);

凍結(jié)的對(duì)象(不能加,不能改,不能刪)

Object.freeze方法可以使得一個(gè)對(duì)象無(wú)法添加新屬性、無(wú)法刪除舊屬性、也無(wú)法改變屬性的值,使得這個(gè)對(duì)象實(shí)際上變成了常量。
判斷: Object.isFrozen(obj);

局限性: 需要注意的是,使用上面這些方法鎖定對(duì)象的可寫(xiě)性,但是依然可以通過(guò)改變?cè)搶?duì)象的原型對(duì)象,來(lái)為它增加屬性。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88045.html

相關(guān)文章

  • JavaScript中的面向對(duì)象object-oriented)編程

    摘要:對(duì)象在中,除了數(shù)字字符串布爾值這幾個(gè)簡(jiǎn)單類(lèi)型外,其他的都是對(duì)象。那么在函數(shù)對(duì)象中,這兩個(gè)屬性的有什么區(qū)別呢表示該函數(shù)對(duì)象的原型表示使用來(lái)執(zhí)行該函數(shù)時(shí)這種函數(shù)一般成為構(gòu)造函數(shù),后面會(huì)講解,新創(chuàng)建的對(duì)象的原型。這時(shí)的函數(shù)通常稱(chēng)為構(gòu)造函數(shù)。。 本文原發(fā)于我的個(gè)人博客,經(jīng)多次修改后發(fā)到sf上。本文仍在不斷修改中,最新版請(qǐng)?jiān)L問(wèn)個(gè)人博客。 最近工作一直在用nodejs做開(kāi)發(fā),有了nodejs,...

    JerryZou 評(píng)論0 收藏0
  • JavaScript 原型中的哲學(xué)思想

    摘要:而作為構(gòu)造函數(shù),需要有個(gè)屬性用來(lái)作為以該構(gòu)造函數(shù)創(chuàng)造的實(shí)例的繼承。 歡迎來(lái)我的博客閱讀:「JavaScript 原型中的哲學(xué)思想」 記得當(dāng)年初試前端的時(shí)候,學(xué)習(xí)JavaScript過(guò)程中,原型問(wèn)題一直讓我疑惑許久,那時(shí)候捧著那本著名的紅皮書(shū),看到有關(guān)原型的講解時(shí),總是心存疑慮。 當(dāng)在JavaScript世界中走過(guò)不少旅程之后,再次萌發(fā)起研究這部分知識(shí)的欲望,翻閱了不少書(shū)籍和資料,才搞懂...

    sugarmo 評(píng)論0 收藏0
  • 深入理解Javascript原型關(guān)系

    摘要:如下所示在規(guī)范中,已經(jīng)正式把屬性添加到規(guī)范中也可以通過(guò)設(shè)置和獲取對(duì)象的原型對(duì)象對(duì)象之間的關(guān)系可以用下圖來(lái)表示但規(guī)范主要介紹了如何利用構(gòu)造函數(shù)去構(gòu)建原型關(guān)系。 前言 在軟件工程中,代碼重用的模式極為重要,因?yàn)樗麄兛梢燥@著地減少軟件開(kāi)發(fā)的成本。在那些主流的基于類(lèi)的語(yǔ)言(比如Java,C++)中都是通過(guò)繼承(extend)來(lái)實(shí)現(xiàn)代碼復(fù)用,同時(shí)類(lèi)繼承引入了一套類(lèi)型規(guī)范。而JavaScript是...

    ethernet 評(píng)論0 收藏0
  • [譯] 為什么原型繼承很重要

    摘要:使用構(gòu)造函數(shù)的原型繼承相比使用原型的原型繼承更加復(fù)雜,我們先看看使用原型的原型繼承上面的代碼很容易理解。相反的,使用構(gòu)造函數(shù)的原型繼承像下面這樣當(dāng)然,構(gòu)造函數(shù)的方式更簡(jiǎn)單。 五天之前我寫(xiě)了一個(gè)關(guān)于ES6標(biāo)準(zhǔn)中Class的文章。在里面我介紹了如何用現(xiàn)有的Javascript來(lái)模擬類(lèi)并且介紹了ES6中類(lèi)的用法,其實(shí)它只是一個(gè)語(yǔ)法糖。感謝Om Shakar以及Javascript Room中...

    xiao7cn 評(píng)論0 收藏0
  • 【譯】如何在 JavaScript 中使用對(duì)象的方法

    摘要:中的所有對(duì)象都來(lái)自父的構(gòu)造函數(shù)。不同于數(shù)組的原型方法例如和只能被數(shù)組實(shí)例使用,對(duì)象方法直接來(lái)自構(gòu)造函數(shù),并使用對(duì)象實(shí)例作為參數(shù)。這稱(chēng)為靜態(tài)方法。創(chuàng)建對(duì)象的鍵值對(duì)的嵌套數(shù)組??捎糜诖_定對(duì)象是否已凍結(jié),并返回布爾值。 原文:How To Use Object Methods in JavaScript作者:Tania Rascia譯者:博軒 介紹 JavaScript 中,對(duì)象是 鍵/值 ...

    longmon 評(píng)論0 收藏0
  • javascript中的constructor&&prototype

    摘要:于是退而求其次叫為類(lèi)的構(gòu)造函數(shù)。如果這個(gè)函數(shù)被用在創(chuàng)建自定義對(duì)象的場(chǎng)景中,我們稱(chēng)這個(gè)函數(shù)為構(gòu)造函數(shù)。遇到的問(wèn)題始終指向創(chuàng)建當(dāng)前對(duì)象的構(gòu)造函數(shù)。 Object.constructor,prototype 對(duì)象的prototype和constructor是兩個(gè)重要的屬性,他們總是成對(duì)出現(xiàn),提到constructor的地方,不得不涉及到另外一個(gè)非常重要的屬性prototype,它是js中基于...

    huaixiaoz 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<