亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

【JavaScript】面向?qū)ο?

gself / 397人閱讀

摘要:一面向?qū)ο蟾攀雒嫦驅(qū)ο笫鞘裁词鞘褂靡幌盗袑?duì)象相互協(xié)作軟件設(shè)計(jì),目的是在編程中促進(jìn)更好靈活性和可維護(hù)性,憑借對(duì)模塊化重視,面向?qū)ο蟠a開(kāi)發(fā)更簡(jiǎn)單,容易理解面向?qū)ο蟮挠兄饕卣魇欠庋b繼承多態(tài)封裝封裝主要用于敘述對(duì)象中所包含封裝的內(nèi)容,由兩部分組

JS(JavaScript)
一.面向?qū)ο螅?br>概述;

面向?qū)ο笫鞘裁矗?/p>

是使用一系列對(duì)象相互協(xié)作軟件設(shè)計(jì),目的是在編程中促進(jìn)更好靈活性和可維護(hù)性,憑借對(duì)模塊化重視,面向?qū)ο蟠a開(kāi)發(fā)更簡(jiǎn)單,容易理解
面向?qū)ο蟮挠兄饕卣魇?.封裝;2.繼承;3.多態(tài)

封裝;

封裝主要用于敘述對(duì)象中所包含(封裝)的內(nèi)容,由兩部分組成
相關(guān)的數(shù)據(jù)(儲(chǔ)存屬性)
這些數(shù)據(jù)所能做的事情

繼承;

是指類(lèi)和類(lèi)之間的關(guān)系,如兩個(gè)類(lèi)都有相同的屬性和方法,那么其中一個(gè)類(lèi)并可以繼承另一個(gè)類(lèi),這樣不需要再次定義同樣的屬性和方法
創(chuàng)建一個(gè)或多個(gè)類(lèi)專(zhuān)門(mén)類(lèi)方式稱(chēng)為繼承,有兩個(gè)類(lèi)其中一個(gè)叫子類(lèi),另一個(gè)是叫做父類(lèi)

多態(tài);

不同的對(duì)象可以定義有相同名稱(chēng)方法,方法是作用所在對(duì)象中,不同對(duì)象相同方法調(diào)用各自行為能力則為多態(tài)
如A對(duì)象有sayMe()方法,B對(duì)象繼承A對(duì)象,而B(niǎo)對(duì)象也有具有sayMe()方法,sayMe()方法時(shí),并不知道該方法A對(duì)象還是B對(duì)象,且不影響代碼正常工作
2.構(gòu)造函數(shù);

構(gòu)造函數(shù);

構(gòu)造函數(shù)稱(chēng)為構(gòu)造器和對(duì)象模版是對(duì)象的一餓方法,構(gòu)造器被調(diào)用,在
JS(JavaScript)中函數(shù)可以作為構(gòu)造器使用,,并不需要定義個(gè)構(gòu)造器方法

構(gòu)造函數(shù)的屬性;

就是對(duì)象的變量,一個(gè)對(duì)象包含多個(gè)屬性,定義構(gòu)造函數(shù)屬性是使用this關(guān)鍵字

構(gòu)造函數(shù)的方法;

該方法,很想構(gòu)造函數(shù)屬性,不同是方法是個(gè)函數(shù)(或像函數(shù)一樣定義)定義構(gòu)造函數(shù)屬性是使用this關(guān)鍵字

this關(guān)鍵字

有套完全不同于其它語(yǔ)言對(duì)this處理機(jī)制,this關(guān)鍵字本身沒(méi)有任何意義

/*
    用于創(chuàng)建對(duì)象(屬性和方法)
    function 構(gòu)造函數(shù)名稱(chēng)(){
        this.屬性名 = 屬性值;
        this.方法名 = function(){
            方法體
        }
    }
    this關(guān)鍵字-指代利用當(dāng)前構(gòu)造函數(shù)創(chuàng)建的對(duì)象
 */
function Hero(name){
    this.name = name;
    this.sayMe = function(){
        console.log("我是" + name);
    }
}
// 利用構(gòu)造函數(shù)創(chuàng)建對(duì)象
var hero = new Hero("犬夜叉");
console.log(hero);

var obj = {
    name : "犬夜叉",
    sayMe : function(){
        console.log("我是犬夜叉");
    }
}

二.Object類(lèi)型;
1.操作對(duì)象的屬性;

設(shè)置屬性描述符value;

是該屬性所對(duì)應(yīng)值,可以是如何有效的JS(JavaScript)值(數(shù)值,對(duì)象,函數(shù))為默認(rèn)值undefined

var obj = {
    // 定義對(duì)象的同時(shí)定義了該屬性以及值(可修改、可刪除以及可枚舉的)
    name : "犬夜叉"
}

Object.defineProperty(obj, "name", {
    value : "桔梗"
});
console.log(obj.name);// 桔梗
/*
    同樣都是為對(duì)象新增屬性
    1.如果直接使用 "對(duì)象名.屬性名 = 值" -> 可修改、可刪除以及可枚舉的
    2.如果使用Object.defineProperty()方法新增屬性
      * 該新屬性是不可修改、不可刪除以及不可枚舉的
 */
Object.defineProperty(obj, "age", {
    value : 16
});
console.log(obj.age);// 16

var result1 = Object.getOwnPropertyDescriptor(obj, "age");
console.log(result1);
// 一旦屬性的值是不可修改的 - 如果執(zhí)行修改操作時(shí) -> 沒(méi)有語(yǔ)法報(bào)錯(cuò),但是無(wú)效
obj.age = 80;
console.log(obj.age);// 16

obj.job = "妖狐";
var result2 = Object.getOwnPropertyDescriptor(obj, "job");
console.log(result2);

設(shè)置屬性描述符writable;

當(dāng)該屬性為true時(shí),value才能被賦值運(yùn)算符所改變,默認(rèn)為false

var obj = {
    // 定義對(duì)象的同時(shí)定義了該屬性以及值(可修改、可刪除以及可枚舉的)
    name : "犬夜叉"
}
// 修改現(xiàn)有屬性
Object.defineProperty(obj, "name", {
    value : "桔梗",
    writable : false // 不可修改
});
console.log(obj.name);// 桔梗
// 修改name屬性值
obj.name = "戈薇";
console.log(obj.name);// 桔梗

Object.defineProperty(obj, "age", {
   value : 18,
   writable : true
});
console.log(obj.age);// 16
// 修改age屬性值
obj.age = 80;
console.log(obj.age);// 80
// 刪除age屬性值
delete obj.age;
console.log(obj.age);// undefined

設(shè)置屬性描述符configurable;

該屬性為true時(shí),該屬性描述符才能改變,同時(shí)會(huì)從相同的對(duì)象中被刪除,默認(rèn)為false

var obj = {
    // 定義對(duì)象的同時(shí)定義了該屬性以及值(可修改、可刪除以及可枚舉的)
    name : "犬夜叉"
}
// 修改現(xiàn)有屬性
Object.defineProperty(obj, "name", {
    value : "桔梗",
    writable : true, // 控制當(dāng)前屬性是否可被修改
    configurable : true // 控制當(dāng)前屬性是否可被刪除
});
console.log(obj.name);// 桔梗
// 修改name屬性值
obj.name = "戈薇";
console.log(obj.name);// 桔梗
// 刪除name屬性值
delete obj.name;
console.log(obj.name);// 桔梗

設(shè)置屬性描述符enumerable;

該屬性為true時(shí),屬性才能出現(xiàn)在對(duì)象枚舉屬性中,默認(rèn)為false

var obj = {
    // 定義對(duì)象的同時(shí)定義了該屬性以及值(可修改、可刪除以及可枚舉的)
    name : "犬夜叉"
}
Object.defineProperty(obj, "name", {
    value : "桔梗",
    enumerable : false
});
console.log(obj.name);// 桔梗
/*
    屬性描述符enumerable - 控制當(dāng)前屬性是否可被枚舉(遍歷)
    * 僅能循環(huán)遍歷對(duì)象中可被枚舉的屬性
      * for...in語(yǔ)句
      * keys()方法
    * 可以循環(huán)遍歷對(duì)象中可被枚舉和不可被枚舉的屬性
      * getOwnPropertyNames()方法
 */
for (var i in obj) {
    console.log(i);
}
var result1 = Object.keys(obj);
console.log(result1);
var result2 = Object.getOwnPropertyNames(obj);
console.log(result2);

屬性描述符設(shè)置方法

var obj = {
    sayMe : function(){
        console.log("this is function");
    }
}
var result = Object.getOwnPropertyDescriptor(obj, "sayMe");
console.log(result);

Object.defineProperty(obj, "sayMe", {
    value : function(){
        console.log("this is new function");
    },
    writable : false
});
obj.sayMe();

obj.sayMe = function(){
    console.log("這是犬夜叉");
}
obj.sayMe();

屬性描述符存取器

var obj = {
    name : "犬夜叉"
}
var value;// 全局變量
Object.defineProperty(obj,"name",{// 當(dāng)獲取或訪問(wèn)當(dāng)前屬性時(shí),會(huì)調(diào)用get方法
    get : function () {
        // 獲取指定的屬性值
        console.log("Inuyasha");

         /*
          get方法在被調(diào)用時(shí),不能傳遞任何參數(shù)
          get方法在被調(diào)用時(shí),允許傳遞this關(guān)鍵字
          this - 表示當(dāng)前的目標(biāo)對(duì)象(不能調(diào)用對(duì)象的當(dāng)前目標(biāo)屬性)
          */
        return value;// 由于變量為初始化,調(diào)用時(shí)可能結(jié)果為 undefined
    },
    set : function (newValue) {
        console.log("Inuyasha: " + value);
        value = newValue;
        /*
        set方法在被調(diào)用時(shí),允許傳遞this關(guān)鍵字
        this - 表示當(dāng)前的目標(biāo)對(duì)象(不能調(diào)用對(duì)象的當(dāng)前目標(biāo)屬性)
         */
    }
})
console.log(obj.name);// undefined
obj.name = "桔梗";
console.log(obj.name);//桔梗

2.防篡改對(duì)象;

禁止擴(kuò)展

Object.preventExtensions()表示對(duì)象不可擴(kuò)展,不能新增屬性和方法
Object.isExtensible()表示判斷是否可擴(kuò)展

var obj = {};
// 將對(duì)象設(shè)置禁止擴(kuò)展
Object.preventExtensions(obj);
// 新增屬性或方法無(wú)效 -> 語(yǔ)法沒(méi)有報(bào)錯(cuò)
obj.name = "犬夜叉";
console.log(obj);
/*
    Object.defineProperty()方法新增屬性
    * 結(jié)果 - 報(bào)錯(cuò)
    * 信息 - TypeError: Cannot define property:name, object is not extensible.
 */
Object.defineProperty(obj, "name", {
    value : "桔梗"
});
console.log(obj);

/*
    Object.isExtensible(obj)方法
    * 作用 - 用于判斷指定目標(biāo)對(duì)象是否可擴(kuò)展
    * 返回值
      * true - 表示指定目標(biāo)對(duì)象是可擴(kuò)展的
      * false - 表示指定目標(biāo)哦對(duì)象是不可擴(kuò)展的
 */
var result = Object.isExtensible(obj);
console.log(result);

密封對(duì)象

Object.seal()表示封閉個(gè)對(duì)象,阻止增加新屬性,現(xiàn)有屬性不可設(shè)置,
Object.isSealed()判斷個(gè)對(duì)象是否密封

var obj = {
    name : "犬夜叉" // 表示可修改
};
console.log(Object.getOwnPropertyDescriptor(obj, "name"));

/*
    將該對(duì)象進(jìn)行密封
    1.不能為該對(duì)象新增屬性或方法
    2.不能修改該對(duì)象的屬性或方法的描述符
      * configurable
      * enumerable
  */
Object.seal(obj);

console.log(Object.getOwnPropertyDescriptor(obj, "name"));

/*Object.defineProperty(obj, "age", {
    value : 16
});*/
Object.defineProperty(obj, "name", {
    value : "桔梗",
    writable : false, // 表示不可修改
    configurable : true,
    enumerable : false
});

console.log(Object.getOwnPropertyDescriptor(obj, "name"))

console.log(obj);

obj.name = "戈薇";
console.log(obj);

凍結(jié)對(duì)象

Object.freeze()凍結(jié)個(gè)對(duì)象,不能增加新屬性給該對(duì)象,也不能修改此屬性值,已有屬性不能刪除,也不能修改此對(duì)象的屬性,該方法返回被凍結(jié)對(duì)象
Object.isFrozen()判斷個(gè)對(duì)象是否被凍結(jié)

var obj = {
    name : "犬夜叉"
}
// 凍結(jié)對(duì)象
Object.freeze(obj);

/*obj.age = 16;
console.log(obj);
obj.name = "桔梗";
console.log(obj);
delete obj.name;
console.log(obj);*/

Object.defineProperty(obj, "age", {
    value : 16
});
console.log(obj);

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

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

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類(lèi),即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類(lèi)是相似對(duì)象的描述,稱(chēng)為類(lèi)的定義,是該類(lèi)對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類(lèi)的實(shí)體化形成的對(duì)象。一類(lèi)的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類(lèi)的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評(píng)論0 收藏0
  • 面向對(duì)象JavaScript

    摘要:是完全的面向?qū)ο笳Z(yǔ)言,它們通過(guò)類(lèi)的形式組織函數(shù)和變量,使之不能脫離對(duì)象存在。而在基于原型的面向?qū)ο蠓绞街?,?duì)象則是依靠構(gòu)造器利用原型構(gòu)造出來(lái)的。 JavaScript 函數(shù)式腳本語(yǔ)言特性以及其看似隨意的編寫(xiě)風(fēng)格,導(dǎo)致長(zhǎng)期以來(lái)人們對(duì)這一門(mén)語(yǔ)言的誤解,即認(rèn)為 JavaScript 不是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽猓瑥膶?duì)語(yǔ)言感悟的角度闡述為什...

    novo 評(píng)論0 收藏0
  • javascript 面向對(duì)象版塊之理解對(duì)象

    摘要:用代碼可以這樣描述安全到達(dá)國(guó)外面向過(guò)程既然說(shuō)了面向?qū)ο?,那么與之對(duì)應(yīng)的就是面向過(guò)程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^(guò)程,以及中對(duì)象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對(duì)面向?qū)ο笏枷氲囊粋€(gè)理解。先說(shuō)說(shuō)什么是對(duì)象,其實(shí)這個(gè)還真的不好說(shuō)。我們可以把自己當(dāng)成一個(gè)對(duì)象,或者過(guò)年的時(shí)候相親,找對(duì)象,那么你未來(lái)的老婆也是一個(gè)對(duì)象。我們就要一些屬性,比...

    lovXin 評(píng)論0 收藏0
  • javascript面向對(duì)象之“多態(tài)”

    摘要:之前,本質(zhì)上不能算是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,因?yàn)樗鼘?duì)于封裝繼承多態(tài)這些面向?qū)ο笳Z(yǔ)言的特點(diǎn)并沒(méi)有在語(yǔ)言層面上提供原生的支持。所以在中出現(xiàn)了等關(guān)鍵字,解決了面向?qū)ο笾谐霈F(xiàn)了問(wèn)題。 ES6之前,javascript本質(zhì)上不能算是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,因?yàn)樗鼘?duì)于封裝、繼承、多態(tài)這些面向?qū)ο笳Z(yǔ)言的特點(diǎn)并沒(méi)有在語(yǔ)言層面上提供原生的支持。但是,它引入了原型(prototype)的概念,可以讓我們以...

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

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

0條評(píng)論

gself

|高級(jí)講師

TA的文章

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