日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ECMAScript5 Object的新属性方法

發(fā)布時(shí)間:2023/12/31 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ECMAScript5 Object的新属性方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Object.create(prototype[,descriptors])

這個(gè)方法用于創(chuàng)建一個(gè)對(duì)象,并把其prototype屬性賦值為第一個(gè)參數(shù),同時(shí)可以設(shè)置多個(gè)descriptors,關(guān)于decriptor下一個(gè)方法就會(huì)介紹這里先不說(shuō)。只需要這樣就可以創(chuàng)建一個(gè)原型鏈干凈對(duì)象了:

var o = Object.create({"say": function () {alert(this.name);},"name":"Byron"});

Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors)

想明白這兩個(gè)函數(shù)必須明白descriptor是什么,在之前的JavaScript中對(duì)象字段是對(duì)象屬性,是一個(gè)鍵值對(duì),而在ECMAScript5中引入property,property有幾個(gè)特征

  • value:值,默認(rèn)是undefined;

  • writable:是否是只讀property,默認(rèn)是false,有點(diǎn)像C#中的const;

  • enumerable:是否可以被枚舉(for in),默認(rèn)false;

  • configurable:是否可以被刪除,默認(rèn)false同樣可以像C#、Java一樣些get/set,不過(guò)這兩個(gè)不能和value、writable同時(shí)使用;

  • 5.get:返回property的值得方法,默認(rèn)是undefined;

    6.set:為property設(shè)置值的方法,默認(rèn)是undefined.

    Object.defineProperty(o,'age', {value: 24,writable: true,enumerable: true,configurable: true});Object.defineProperty(o, 'sex', {value: 'male',writable: false,enumerable: false,configurable: false});console.log(o.age); //24o.age = 25;for (var obj in o) {console.log(obj + ' : ' + o[obj]);/*age : 25 //沒有把sex : male 遍歷出來(lái)say : function () {alert(this.name);} name : Byron */}delete o.age;console.log(o.age);//undefined console.log(o.sex); //male//o.sex = 'female'; //Cannot assign to read only property 'sex' of #<Object> delete o.age; console.log(o.sex); //male ,并沒有被刪除

    也可以使用defineProperties方法同時(shí)定義多個(gè)property,

    Object.defineProperties(o, {'age': {value: 24,writable: true,enumerable: true,configurable: true},'sex': {value: 'male',writable: false,enumerable: false,configurable: false}});

    Object.getOwnPropertyDescriptor(O,property)

    這個(gè)方法用于獲取defineProperty方法設(shè)置的property 特性

    var props = Object.getOwnPropertyDescriptor(o, 'age');console.log(props); //Object {value: 24, writable: true, enumerable: true, configurable: true}

    Object.getOwnPropertyNames

    獲取所有的屬性名,不包括prototy中的屬性,返回一個(gè)數(shù)組

    console.log(Object.getOwnPropertyNames(o)); //["age", "sex"]

    例子中可以看到prototype中的name屬性沒有獲取到


    Object.keys()

    和getOwnPropertyNames方法類似,但是獲取所有的可枚舉的屬性,返回一個(gè)數(shù)組

    console.log(Object.keys(o)); //["age"]

    上面例子可以看出不可枚舉的sex都沒有獲取的到


    Object.preventExtensions(O) / Object.isExtensible

    方法用于鎖住對(duì)象屬性,使其不能夠拓展,也就是不能增加新的屬性,但是屬性的值仍然可以更改,也可以把屬性刪除,Object.isExtensible用于判斷對(duì)象是否可以被拓展

    復(fù)制代碼

    console.log(Object.isExtensible(o)); //trueo.lastName = 'Sun';console.log(o.lastName); //Sun ,此時(shí)對(duì)象可以拓展Object.preventExtensions(o);console.log(Object.isExtensible(o)); //falseo.lastName = "ByronSun";console.log(o.lastName); //ByronSun,屬性值仍然可以修改//delete o.lastName;console.log(o.lastName); //undefined仍可刪除屬性o.firstname = 'Byron'; //Can't add property firstname, object is not extensible 不能夠添加屬性

    Object.seal(O) / Object.isSealed

    方法用于把對(duì)象密封,也就是讓對(duì)象既不可以拓展也不可以刪除屬性(把每個(gè)屬性的configurable設(shè)為false),單數(shù)屬性值仍然可以修改,Object.isSealed由于判斷對(duì)象是否被密封

    Object.seal(o);o.age = 25; //仍然可以修改delete o.age; //Cannot delete property 'age' of #<Object>

    Object.freeze(O) / Object.isFrozen

    終極神器,完全凍結(jié)對(duì)象,在seal的基礎(chǔ)上,屬性值也不可以修改(每個(gè)屬性的wirtable也被設(shè)為false)

    Object.freeze(o);o.age = 25; //Cannot assign to read only property 'age' of #<Object>

    上面的代碼都是在Chrome 29下一嚴(yán)格模式(’use strict’)運(yùn)行的,而且提到的方法都是Object的靜態(tài)函數(shù),也就是在使用的時(shí)候應(yīng)該是Object.xxx(x),而不能以對(duì)象實(shí)例來(lái)調(diào)用。總體來(lái)說(shuō)ES5添加的這些方法為javaScript面向?qū)ο笤O(shè)計(jì)提供了進(jìn)一步的可配置性,用起來(lái)感覺很不錯(cuò)。

    總結(jié)

    以上是生活随笔為你收集整理的ECMAScript5 Object的新属性方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。