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

資訊專欄INFORMATION COLUMN

深入了解JavaScript對(duì)象(2)--函數(shù)、對(duì)象

darkerXi / 2748人閱讀

摘要:屬性是函數(shù)獨(dú)有的,表明該對(duì)象可以被執(zhí)行。李四張三張三李四李四李四張三屬性探測由于屬性可以在任何時(shí)候添加,所以有時(shí)候就有必要檢查對(duì)象是否已有一個(gè)屬性。張三屬性特征通過方法來改變屬性特征。

1.[[Call]]屬性是函數(shù)獨(dú)有的,表明該對(duì)象可以被執(zhí)行。由于僅函數(shù)擁有該對(duì)象,ECMAScript定義typeof操作符對(duì)任何具有[[Call]]屬性的對(duì)象返回“function”。

注:某些瀏覽器曾經(jīng)在正則表達(dá)式中包含[[Call]]屬性,導(dǎo)致后者被錯(cuò)誤鑒別為函數(shù)?,F(xiàn)在,所有的瀏覽器行為都一致,typeof不會(huì)再將正則表達(dá)式鑒別為函數(shù)。

2.函數(shù)具有兩種字面形式。第一種為函數(shù)聲明,第二種為函數(shù)表達(dá)式。這兩種區(qū)別在于函數(shù)聲明會(huì)提前,意味著可以先使用函數(shù)后聲明。

// 函數(shù)聲明
function add(num1, num2){
    return num1 + num2;
}

// 函數(shù)表達(dá)式
var add = function(num1, num2){
    return num1 + num2;
};

3.array.sort()方法,默認(rèn)將所有值轉(zhuǎn)成字符串,再進(jìn)行比較。

var array = [1, 2, 7, 4, 10];
array.sort(function(a, b){
    return a - b;
});
console.log(array);    // [1, 2, 4, 7, 10]
array.sort();
console.log(array);    // [ 1, 10, 2, 4, 7 ]

4.call、apply和bind

注:call調(diào)用方式,func.call(this. arg1, arg2),apply調(diào)用方式,func.apply(this, [arg1, arg2]),bind返回一個(gè)函數(shù)。

var name = "李四";
var person = {
    name: "張三",
    sayName: function(){
        console.log(this.name);
    }
};
person.sayName();    // 張三
person.sayName.apply(window);    // 李四
person.sayName.call(window);    // 李四
var aaa = person.sayName;
aaa();    // 李四
var aaa = person.sayName.bind(person);
aaa();    // 張三

5、屬性探測
由于屬性可以在任何時(shí)候添加,所以有時(shí)候就有必要檢查對(duì)象是否已有一個(gè)屬性。以下模式探測是錯(cuò)誤的。問題在于if判斷中的值是一個(gè)對(duì)象、非空字符串、非零數(shù)字或true時(shí),判斷為真;而當(dāng)值是一個(gè)null、undefined、0、false、NaN或空字符串時(shí)為假。由于一個(gè)對(duì)象屬性可以包含這些假值,所以下面代碼有可能會(huì)出現(xiàn)問題。更加可靠的判斷屬性是否存在應(yīng)該是使用in操作符。in操作符在給定對(duì)象中查找一個(gè)給定名稱的屬性,如果找到則返回true。

if(peroson.age){
    // do something
}

在大多數(shù)時(shí)候,in操作符是最好的選擇。但是當(dāng)需要檢查屬性是自有屬性還是原型屬性時(shí),則需要使用hasOwnProperty()方法。該方法在給定的屬性存在且為自有屬性時(shí)返回true。
6、屬性枚舉

所有可枚舉的屬性都可以通過for-in循環(huán)遍歷??擅杜e屬性的內(nèi)部特征[[Enumerable]]都被設(shè)置為true。

Object.keys()方法,可以某一對(duì)象的所有可枚舉屬性。

for-in循環(huán)返回的和Object.keys()返回的可枚舉屬性有一個(gè)區(qū)別。for-in循環(huán)同時(shí)也會(huì)遍歷原型屬性,Object.keys()只返回自有(實(shí)例)屬性。

可以使用propertyIsEnumerable()方法檢查一個(gè)屬性是否為可枚舉的。

var person = {
    name: "張三"
};
person.propertyIsEnumerable("name")    // true

7、屬性特征

通過Object.defineProperty()方法來改變屬性特征。Object.defineProperty()方法接受3個(gè)參數(shù):擁有該屬性的對(duì)象、屬性名和包含需要設(shè)置的特征的屬性描述對(duì)象。屬性描述對(duì)象具有和內(nèi)部特征同名的屬性,但名字中不能包含中括號(hào)。所以可以用enumerable屬性來設(shè)置[[Enumerable]]特征。

當(dāng)使用Object.defineProperty()方法設(shè)置屬性不可配置后,無法再次通過此方法設(shè)置為可配置。

通過Object.defineProperties()方法可以同時(shí)定義多個(gè)屬性。該方法接收兩個(gè)參數(shù):需要改變的對(duì)象和一個(gè)包含所有屬性信息的對(duì)象。

var person = {};
Object.defineProperties(person, {
    _name: {
        value: "張三",
        enumberable: true,
        configurable: true,
        writable: true
    },
    name: {
        get: function(){},
        set: function(){}
    }
})

通過Object.getOwnPropertyDescriptor()方法可以獲取屬性特征。該方法接收兩個(gè)參數(shù):對(duì)象和屬性名。如果屬性存在,則返回一個(gè)屬性描述對(duì)象。

Object.preventExtensions()創(chuàng)建一個(gè)不可擴(kuò)展的對(duì)象。該方法接收一個(gè)參數(shù),就是對(duì)象。通過Object.isExtensible()來檢查[[Extensible]]的值。

Object.seal()封印對(duì)象。封印的對(duì)象是不可擴(kuò)展的且所有屬性都不可配置。通過Object.isSealed()判斷對(duì)象是否被封印。

Object.freeze()凍結(jié)對(duì)象。凍結(jié)的對(duì)象是一個(gè)數(shù)據(jù)屬性都為只讀的被封印對(duì)象,被凍結(jié)對(duì)象無法解凍。通過Object.isFrozen()判斷對(duì)象是否被凍結(jié)。

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

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

相關(guān)文章

  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評(píng)論0 收藏0
  • JavaScript中對(duì)this深入了解

    摘要:但是有一個(gè)總的原則,那就是指的是調(diào)用函數(shù)的那個(gè)對(duì)象。作為構(gòu)造函數(shù)調(diào)用如果在一個(gè)函數(shù)前面帶上來調(diào)用,那么背地里將會(huì)創(chuàng)建一個(gè)鏈接到該函數(shù)的成員的新對(duì)象,同時(shí)會(huì)被綁定到那個(gè)新對(duì)象上。使用或調(diào)用方法讓我們構(gòu)建一個(gè)參數(shù)數(shù)組傳遞給調(diào)用函數(shù)。 讓我們深入探索一下this的具體用法 只有了解this用法才算真正入門了 showImg(https://segmentfault.com/img/bVYh1...

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

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

    ethernet 評(píng)論0 收藏0
  • Javascript深入理解this作用域問題以及new/let/var/const對(duì)this作

    摘要:理解作用域高級(jí)程序設(shè)計(jì)中有說到對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的在全局函數(shù)中,等于,而當(dāng)函數(shù)被作為某個(gè)對(duì)象調(diào)用時(shí),等于那個(gè)對(duì)象。指向與匿名函數(shù)沒有關(guān)系如果函數(shù)獨(dú)立調(diào)用,那么該函數(shù)內(nèi)部的,則指向。 理解this作用域 《javascript高級(jí)程序設(shè)計(jì)》中有說到: this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的:在全局函數(shù)中,this等于window,而當(dāng)函數(shù)被作為某個(gè)對(duì)象調(diào)用時(shí),t...

    snowLu 評(píng)論0 收藏0
  • JavaScript深入之閉包

    摘要:深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。定義對(duì)閉包的定義為閉包是指那些能夠訪問自由變量的函數(shù)。 JavaScript深入系列第八篇,介紹理論上的閉包和實(shí)踐上的閉包,以及從作用域鏈的角度解析經(jīng)典的閉包題。 定義 MDN 對(duì)閉包的定義為: 閉包是指那些能夠訪問自由變量的函數(shù)。 那什么是自由變量呢? 自由變量是指在函數(shù)中使用的,但既不是函數(shù)參數(shù)也...

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

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

0條評(píng)論

閱讀需要支付1元查看
<