成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【JavaScript】【對象】屬性和方法的總結(jié)歸納

qiangdada / 3511人閱讀

摘要:構(gòu)造函數(shù)原型對象實例對象之間的關(guān)系錯綜復(fù)雜,關(guān)于它們的屬性和方法很多,長得也很像。表示能否修改屬性的值。屬性和方法以下的屬性和方法均以下面的代碼為例構(gòu)造函數(shù)指向原型對象,包含所有被實例共享的屬性和方法。

構(gòu)造函數(shù)、原型對象、實例對象之間的關(guān)系錯綜復(fù)雜,關(guān)于它們的屬性和方法很多,長得也很像。這里歸納出來,方便記憶和查閱。

對象屬性類型 數(shù)據(jù)屬性

[[Configurable]]:表示能否通過delete刪除屬性從而重新定義屬性、能否修改屬性的特性、能否把屬性修改為訪問器屬性。默認(rèn)值為true。
[[Enumerable]]:表示是否可枚舉。默認(rèn)值為true
[[Writable]]:表示能否修改屬性的值。默認(rèn)值為true。
[[Value]]:包含屬性的數(shù)據(jù)值,在這里讀寫屬性。默認(rèn)值為undefined。

修改屬性的特性:Object.defineProperty()Object.defineProperties()。調(diào)用這兩個方法時,如果不指定,configurable、enumerable、writable特性的默認(rèn)值都是false

//定義一個屬性
var person = {};
Object.defineProperty(person, "name", {
    value: "hiyohoo",
    configurable: true,
    enumerable: true,
    writable: true
});

//定義多個屬性
var person = {};
Object.defineProperties(person, {
    name: {
        value: "hiyohoo"
    },
    age: {
        value: 24,
        configurable: true,
        writable: true
    }
});

獲取屬性的特性:Object.getOwnPropertyDescriptor()只能用于實例屬性,要取得原型屬性的描述符,需要在原型上使用該方法。

var descriptor = Object.getOwnPropertyDescriptor(person, "age");
alert(descriptor.writable);    //true
訪問器屬性

[[Configurable]]
[[Enumerable]]
[[Get]]:讀取屬性時調(diào)用該函數(shù)。默認(rèn)值為undefined
[[Set]]:寫入屬性時調(diào)用該函數(shù)。默認(rèn)值為undefined。

訪問器屬性不能直接定義,必須使用Object.defineProperty()來定義。訪問器屬性常用于改變該屬性,其他屬性也會變化的情況。

var book = {
    _year: 2004,    //屬性前面的下劃線記號常用于表示只能通過對象方法訪問的屬性。
    edition: 1
};
Object.defineProperty(book, "year", {
    get: function() {
        return this._year;
    },
    set: function(newValue) {
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
        }
    }
});
book.year = 2016;
console.log(book.edition);    //13
屬性和方法

以下的屬性和方法均以下面的代碼為例:

var Person = function(name) {
    this.name = name;
};
Person.prototype.school = "HNU";
Person.prototype.sayName = function() {
    return this.name;
};

var person = new Person("hiyohoo");
構(gòu)造函數(shù)

prototype指向原型對象,包含所有被實例共享的屬性和方法。

console.log(Person.prototype);    //Person{}
原型對象

constructor指向構(gòu)造函數(shù)。

console.log(Person.prototype.constructor === Person);    //true

isPrototypeOf()判斷實例與原型之間的關(guān)系。

console.log(Person.prototype.isPrototypeOf(person));    //true
實例對象

constructor沿著原型鏈找到原型中的constructor屬性,最終指向構(gòu)造函數(shù)。

console.log(person.constructor === Person);    //true

__proto__Firefox、Safari、Chrome支持這個屬性,指向原型對象。

console.log(person.__proto__ === Person.prototype);    //true

hasOwnProperty()Object中繼承而來,判斷屬性是否是實例的私有屬性,而不是繼承而來的共享屬性。

console.log(person.hasOwnProperty("name"));    //true
console.log(person.hasOwnProperty("school"));    //false
Object

Object.getPrototypeOf() ECMAScript 5中新增的方法,返回實例的原型。

console.log(Object.getPrototypeOf(person));    //Person{}

Object.keys() ECMAScript 5中新增的方法,返回一個包含所有可枚舉實例屬性的字符串?dāng)?shù)組。

console.log(Object.keys(person));    //["name"]
console.log(Object.keys(Person.prototype));    //["school", "sayName"]

Object.getOwnPropertyNames()返回所有實例屬性,無論是否可枚舉。

console.log(Object.getOwnPropertyNames(person));    //["name"]
console.log(Object.getOwnPropertyNames(Person.prototype));    //["constructor", "school", "sayName"]
操作符

delete刪除一個configurabletrue的私有屬性。

delete person.name;
delete person.school;

console.log(person.name);    //undefined
console.log(person.school);    //HNU

for-in返回所有能夠訪問到的屬性。

for (p in person) {
    console.log(p);    //name school sayName
}

in對象能夠訪問到屬性時返回true

console.log("name" in person);    //true
console.log("sayName" in person);    //true
console.log("age" in person);    //false

同時使用hasOwnProperty()方法和in操作符,可以確定一個屬性是存在于對象中還是存在于原型中。

function isPrototypeProperty(object, name) {
    if (!(name in object)) {
        return ("Can"t find " + """ + name + """);
    } else if (object.hasOwnProperty(name)) {
        return false;
    } else {
        return true;
    }
}

console.log(isPrototypeProperty(person, "name"));    //false
console.log(isPrototypeProperty(person, "school"));    //true
console.log(isPrototypeProperty(person, "age"));    //Can"t find "age"

instanceof用于判斷一個對象是否是某個對象的實例。

console.log(person instanceof Person);    //true
console.log(person instanceof Object);    //true

轉(zhuǎn)載請注明出處:https://segmentfault.com/a/1190000004561741

文章不定期更新完善,如果能對你有一點點啟發(fā),我將不勝榮幸。

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/78825.html

相關(guān)文章

  • Javascript各種數(shù)組遍歷方法歸納總結(jié)兼容寫法

    摘要:主要用于枚舉對象數(shù)組遍歷效率最低的方法。當(dāng)前數(shù)組元素的值。傳遞給函數(shù)的初始值注意對于空數(shù)組是不會執(zhí)行回調(diào)函數(shù)的。 前言 PS: 2018/04/26 優(yōu)化一下排版,重新梳理一下方法,補充一些信息,刪除JQuery庫用法,只講解Javascript自帶的, for in 語句用于遍歷數(shù)組或者對象的屬性(對數(shù)組或者對象的屬性進行循環(huán)操作)。主要用于枚舉對象, 數(shù)組遍歷效率最低的方法。 va...

    Sanchi 評論0 收藏0
  • js基礎(chǔ)歸納總結(jié)1

    摘要:局部變量在函數(shù)中聲明的變量,會成為函數(shù)的局部變量。局部變量的作用域是局部的只能在函數(shù)內(nèi)部訪問它們。單獨的情況下,指的是全局對象。在事件中,指的是接收事件的元素。布爾值提供一種布爾數(shù)據(jù)類型。所有不具有真實值的即為布爾值為零負(fù)零空值。 閉包 閉包的優(yōu)點:1.可以讀取函數(shù)內(nèi)部的變量2.這些變量的值始終保持在內(nèi)存中適用場景 作用域 作用域指的是有權(quán)訪問的變量集合。在 JavaScript 中有...

    Jeff 評論0 收藏0
  • JavaScript知識架構(gòu)學(xué)習(xí)路徑(一)- 變量篇

    摘要:在此,我們首先根據(jù)變量的作用域,將變量劃分為三級,具體是全局變量局部變量和參數(shù)變量。 【摘要】本文是專為JavaScript入門者而總結(jié)的,總體上將JavaScript的基礎(chǔ)部分分成了九大塊,分別是變量、運算符、數(shù)組、流程控制結(jié)構(gòu)、字符串函數(shù)、函數(shù)基礎(chǔ)、DOM操作基礎(chǔ)、文檔對象模型DOM和正則表達式。 【關(guān)鍵字】變量、運算符、數(shù)組、流程控制結(jié)構(gòu)、函數(shù)、DOM、正則表達式。 本篇文章的主...

    toddmark 評論0 收藏0
  • jQuery學(xué)習(xí)知識點總結(jié)歸納

    摘要:目前在前端開發(fā)所占的比重越來越高,在我們學(xué)習(xí)和開發(fā)的過程中都會去使用。下面把程序員雷雪松對的知識點總結(jié)和歸納分享給大家。過濾對同胞元素的搜索。將匹配元素集合縮減為集合中的最后一個元素。返回指定元素相對于其他指定元素的位置。 jQuery目前在Web前端開發(fā)所占的比重越來越高,在我們jQuery學(xué)習(xí)和開發(fā)的過程中都會去使用。jQuery幫我們解決了瀏覽器之間JS一些不兼容的地方和簡化了原...

    JohnLui 評論0 收藏0
  • 一個關(guān)于對象引用bug引發(fā)對于引用類型及數(shù)組簡單思考

    摘要:圖示如下而對于引用類型的復(fù)制可不是這樣這個復(fù)制只是將的引用賦值給,二者是屬于同一個引用,訪問的都是堆內(nèi)存中的同一個對象,任何一個該引用的變量發(fā)生變化,會對其余使用該引用的變量也發(fā)生變化。 這兩天自己在寫代碼的時候,出現(xiàn)一個BUG,代碼如下: class Car { constructor(carId) { this.position =...

    lijinke666 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<