2019-06-01 js第七天

01對象初體驗(yàn)

//1.變量:本質(zhì)上 就是 內(nèi)存里的一塊空間 ,一次只能存一個數(shù)據(jù)

? ? var age = 18;

? ? //2.數(shù)組:本質(zhì)上 就是 內(nèi)存里 連續(xù)的N個空間,可以 存放多個 數(shù)據(jù)

? ? //? ? ? ? 三要素: 元素、下標(biāo)、legnth

? ? //3.函數(shù):半只上 也是 內(nèi)存里的 一塊空間,只不過存的是 【代碼】

? ? //4.對象:超級容器,可以存放所有東西 -- 變量、數(shù)組、函數(shù)、對象

? ? //? 對象的成員,包括 屬性 和 方法

? ? //4.1 對象的屬性:就是 對象里的 “變量”,用來 保存 數(shù)據(jù)

? ? //4.2 對象的方法:就是 對象里的 “函數(shù)”,用來 保存 代碼

? ? var bzDuiXiang = {

? ? ? // 對象的屬性

? ? ? gfName: '小川川',

? ? ? gfAge: 35,

? ? ? gnfGeder: true,

? ? ? childNames: ['小小川', '小小波'],

? ? ? // 對象的 方法

? ? ? sayHi: function () {

? ? ? ? console.log('Hi~大家好~~我是 班長的 小可愛~~~');

? ? ? }

? ? };

? ? bzDuiXiang.sayHi();

02對象成員的訪問

? //1.對象:超級容器,可以存放所有東西 -- 變量、數(shù)組、函數(shù)、對象

? ? //? 對象的成員,包括 屬性 和 方法

? ? //1.1 對象的屬性:就是 對象里的 “變量”,用來 保存 數(shù)據(jù)

? ? //1.2 對象的方法:就是 對象里的 “函數(shù)”,用來 保存 代碼

? ? var bzDuiXiang = {

? ? ? // 對象的屬性

? ? ? gfName: '小川川',

? ? ? gfAge: 35,

? ? ? gfGender: true,

? ? ? childNames: ['小小川', '小小波'],

? ? ? // 對象的 方法

? ? ? sayHi: function () {

? ? ? ? console.log('Hi~大家好~~我是 班長的 小可愛~~~');

? ? ? }

? ? };

? ? //2.訪問 對象 里的屬性 ---------------------------------------------------

? ? console.log(bzDuiXiang.gfName);

? ? console.log(bzDuiXiang.gfAge);

? ? console.log(bzDuiXiang.gfGender);

? ? console.log(bzDuiXiang.childNames);

? ? //2.1 訪問 對象中 不存在的屬性時,返回 undefined

? ? console.log(bzDuiXiang.money); // undefined

? ? //3. 調(diào)用 對象的 方法

? ? bzDuiXiang.sayHi();

? ? // 打印整個對象

? ? console.log(bzDuiXiang);

03為對象添加成員

//1.對象:超級容器,可以存放所有東西 -- 變量、數(shù)組、函數(shù)、對象

? ? //? 對象的成員,包括 屬性 和 方法

? ? //1.1 對象的屬性:就是 對象里的 “變量”,用來 保存 數(shù)據(jù)

? ? //1.2 對象的方法:就是 對象里的 “函數(shù)”,用來 保存 代碼

? ? var bzDuiXiang = {

? ? ? // 對象的屬性

? ? ? gfName: '小川川',

? ? ? gfAge: 35,

? ? ? gfGender: true,

? ? ? childNames: ['小小川', '小小波'],

? ? ? // 對象的 方法

? ? ? sayHi: function () {

? ? ? ? console.log('Hi~大家好~~我是 班長的 小可愛~~~');

? ? ? }

? ? };

? ? //2.修改 對象 屬性值 ----------------------------------------------------------

? ? bzDuiXiang.gfName = '小東東';

? ? console.log(bzDuiXiang.gfName);

? ? //3.為 對象 動態(tài)添加 屬性------------------------------------------------------

? ? //? 語法:對象.要添加的屬性名 = 屬性值;

? ? bzDuiXiang.money = 15000;

? ? console.log(bzDuiXiang.money);


? ? bzDuiXiang.height = 160;

? ? console.log(bzDuiXiang.height);

? ? //4.為 對象 動態(tài)添加 方法 -----------------------------------------------------

? ? bzDuiXiang.beatBF = function(){

? ? ? console.log('竟敢在外面偷瞄其他男生,打死你個龜孫~~~~~');

? ? };

? ? // 調(diào)用 添加的 方法

? ? bzDuiXiang.beatBF();

? ? // 打印整個對象

? ? console.log(bzDuiXiang);

04刪除對象里的成員

var benLaoPo = {

? ? ? ? name : '小笨蛋',

? ? ? ? cook : function(){

? ? ? ? ? console.log('做的菜真難吃~~~');

? ? ? ? }

? ? ? };

? ? ? console.log(benLaoPo.name);

? ? ? benLaoPo.cook();

? ? ? // 無法 通過 設(shè)置為 null 來 刪除對象里的成員

? ? ? // benLaoPo.cook = null;

? ? ? // benLaoPo.cook();

? ? ? //1. delete 關(guān)鍵字:用來 刪除 對象 里的成員

? ? ? // 刪除 對象里的方法

? ? ? delete benLaoPo.cook;

? ? ? // 刪除 對象里的 屬性

? ? ? delete benLaoPo.name;


? ? ? console.log(benLaoPo);

05對象的中括號訪問法

// var arr = ['P城', 'R城', '軍事基地'];

? ? // console.log(arr[0]);

? ? // console.log(arr);

? ? var girlFriend = {

? ? ? gfName: '小靜',

? ? ? age: 21,

? ? ? gender: false,

? ? ? xcook: function () {

? ? ? ? console.log('做菜簡直就是 金頂廚師的水平~~~~');

? ? ? },

? ? ? run: function () {

? ? ? ? console.log('每天晚上跑跑步~~~~');

? ? ? }

? ? };

? ? girlFriend.angry = function () {

? ? ? console.log('你又說我的菜不好吃,我很生氣,明天你就不要回來了~~~!');

? ? };

? ? //1.使用 . 來訪問 對象的成員 -------------------------------------------------------

? ? console.log(girlFriend.gfName); // '小靜'

? ? console.log(girlFriend.age);? ? // 21

? ? girlFriend.xcook(); // '每天晚上跑跑步~~~~'

? ? //2. 【中括號訪問法】使用 [] 來訪問 對象的成員 --------------------------------------

? ? //? 除了 數(shù)組 可以通過 [下標(biāo)] 來訪問 元素

? ? //? 對象 也可以 通過 ['屬性名'] 來訪問 對應(yīng)的 屬性值

? ? console.log(girlFriend);

? ? // 2.1 使用 中括號 來訪問 對象里的 屬性? ? ? ? --------------------------------------

? ? //? ? 語法:對象['屬性名'] 來訪問 對應(yīng)的 屬性值

? ? console.log('------------------------------');

? ? console.log(girlFriend['gfName']); // -> girlFriend.gfName -> '小靜'

? ? console.log(girlFriend['age']);? ? // -> girlFrined.age? ? ->? 21

? ? console.log(girlFriend['gender']); // -> girlFrined.gender -> false

? ? // 2.2 使用 中括號 來訪問 對象里的 方法? ? ? ? --------------------------------------

? ? //? ? 語法:對象['方法名']();? 來 調(diào)用對應(yīng)的 方法代碼

? ? // girlFriend.xcook( ); // 使用 對象. 調(diào)用方法

? ? girlFriend['xcook']( );

06使用in關(guān)鍵字來判斷對象中是否存在某個成員

var stuInfo = {

? ? ? name: '小白',

? ? ? age: 18,

? ? ? gender: false,

? ? ? sayHi: function () {

? ? ? ? console.log('你好呀~~~');

? ? ? }

? ? };

? ? //1. in 關(guān)鍵字:用來判斷 對象中 是否 存在 某個成員

? ? //? ? ? 返回值:bool值,如果 對象中 存在 指定的屬性 ,返回true,否則返回 false

? ? console.log('name' in stuInfo); // true

? ? console.log('age' in stuInfo); // true

? ? console.log('gender' in stuInfo); // true

? ? console.log('sayHi' in stuInfo); // true

? ? console.log('hobby' in stuInfo); // false

07顯示用戶輸入的屬性值

var girlFriend = {

? ? ? ? gfName: '小靜',

? ? ? ? age: 21,

? ? ? ? gender: false,


? ? ? ? xcook: function () {

? ? ? ? ? console.log('做菜簡直就是 金頂廚師的水平~~~~');

? ? ? ? },

? ? ? ? run: function () {

? ? ? ? ? console.log('每天晚上跑跑步~~~~');

? ? ? ? ? //return undefined;

? ? ? ? }

? ? ? };


? ? ? // 0.1 通過 中括號 訪問法? 訪問對象的屬性值

? ? ? // var proValue = girlFriend['age'];

? ? ? // console.log(proValue);


? ? ? //0.2 通過 .訪問法? 訪問對象的屬性值

? ? ? // var proValue2 = girlFriend.age;

? ? ? // console.log(proValue2);


? ? ? //1.接收用戶輸如的 屬性名 - 假設(shè)用戶 輸入的 是 'gfName'

? ? ? var proName = prompt('請輸入您要訪問的 屬性 的名字:'); //相當(dāng)于 : var proName = 'gfName'


? ? ? //2.根據(jù)用戶書輸入的屬性名 獲取 對應(yīng)的 屬性值

? ? ? var proValue = girlFriend[proName]; //相當(dāng)于 : var proValue = girlFriend['gfName']

? ? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 相當(dāng)于 : var proValue = girlFriend.gfName;? ?

? ? ? //? 打印 屬性值

? ? ? console.log(proValue);

08使用for-in方法遍歷對象的成員

// var arr = [1, 2, 4, 6, 2, 12];

? ? // for (var i = 0; i < arr.length; i++) {

? ? //? console.log(arr[i]);

? ? // }

? ? var stuInfo = {

? ? ? name: '小白',

? ? ? age: 18,

? ? ? gender: false,

? ? ? sayHi: function () {

? ? ? ? console.log('你好呀~~~');

? ? ? }

? ? };

? ? // 【前言:遍歷對象里的成員 無法使用 下標(biāo),因?yàn)?對象沒有下標(biāo),只有? 成員名 和 成員值

? ? //? ? ? 所以,可以 通過 for in 獲取 對象中 每個 成員的名字,然后結(jié)合 對象成員中括號 訪問法 獲取 成員的值】


? ? // 0. for(var key in obj){? }? ---------------------

? ? //? ? for in 語法 專門用來 遍歷 對象 里的每個成員

? ? //? ? a.? key 是 每次 循環(huán) 獲取 到的 對象obj 里的成員 的 名字 字符串

? ? //? ? b.? obj[key] 可以 獲取 對應(yīng)成員 的值

? ? //1.遍歷 對象 里的成員 ---------------------------------------

? ? //1.1 獲取 對象 里的 每個 成員的 名字

? ? for (var k in stuInfo) {

? ? ? // 但因 k 的值 和 類型

? ? ? console.log('k = ' + k + ',typeof k =' + typeof (k));

? ? ? //注意:獲取 對應(yīng)的 屬性值

? ? ? var v = stuInfo[k];

? ? ? console.log('v = ' + v);

? ? }

? ? //1.2 通過 對象中括號 訪問法,根據(jù) 成員名 獲取 成員的值

? ? // stuInfo['gender']

09創(chuàng)建對象的幾種方法補(bǔ)充

//1. new 的方式 創(chuàng)建對象 --------------------------------

? ? //1.1 創(chuàng)建 空 對象

? ? var obj = new Object();

? ? //1.2? 創(chuàng)建 帶 初始 成員的 對象

? ? var obj2 = new Object({

? ? ? age: 1,

? ? ? name: '小白',

? ? ? sayHi: function () {}

? ? });

? ? //2. { } 字面量 方式 創(chuàng)建 對象----------------------------

? ? //2.1 創(chuàng)建 空 對象

? ? var obj = {};

? ? console.log(obj);

? ? //2.2 創(chuàng)建 帶 初始 成員的 對象

? ? var obj2 = {

? ? ? //a.屬性

? ? ? age: 18,

? ? ? gender: true,

? ? ? //b.方法

? ? ? sayHi: function () {

? ? ? ? console.log('你好~~~');

? ? ? },

? ? ? beRich: function () {

? ? ? ? console.log('睡覺,做夢~~~');

? ? ? }

? ? };

10js中的this關(guān)鍵字

? ? //1. 函數(shù)內(nèi)部 有兩個 js基礎(chǔ)階段 要掌握的 特殊屬性: arguments 和 this

? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本質(zhì)上來說:他們倆 就是 函數(shù)內(nèi)部的兩個 特殊的 變量?。?!

? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arguments中 存的 是 實(shí)參列表:所在函數(shù)被調(diào)用時,傳入的 數(shù)據(jù),都自動存入了 arguments 屬性中

? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this 是在函數(shù)被調(diào)用時,保存了所處的 作用域?。?!

? ? // 【this口訣】 函數(shù)方法 在調(diào)用的時候,誰點(diǎn).出的這個方法,方法中的this就是誰!?。?/p>

? ? // this:就是函數(shù)內(nèi)部的一個特殊的屬性,本質(zhì)上就是一個 變量而已

? ? // this 到底是誰:調(diào)用方法時,誰點(diǎn).出的方法,那么方法里的this就是誰?。?!

? ? //1.1 全局函數(shù)里的 this -- 特殊:所有的全局變量、全局函數(shù) 都是 屬于 window對象(全局作用域)-----------

? ? var loverName = '小靜靜';

? ? function showLove() {

? ? ? console.log('i love dog~~~');

? ? ? console.log(this);

? ? }

? ? //? ? 完整的調(diào)用語法,應(yīng)該是 window.方法();

? ? window.showLove();

? ? console.log(window.loverName);

? ? //? ? 特殊:凡是 屬于 window(全局作用域)的成員,調(diào)用時 都可以 省略 window.

? ? showLove(); // --> js引擎 在執(zhí)行代碼時,會 自動改成: window.showLove();

? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 所以,一般情況下,全局函數(shù)方法 里面的 this 都是 window!!!

? ? console.log('-------------------------------');

? ? console.log('-------------------------------');

? ? //1.2 在自定義對象的 方法里的 this --------------------------------------------------------

? ? // function StuInfo(stuName, stuAge, stuGender) {

? ? //? this.name = stuName;

? ? //? this.age = stuAge;

? ? //? this.gender = stuGender;

? ? //? this.sayHi = function () {

? ? //? ? console.log('汪汪~~~' + this.name);

? ? //? }

? ? // }

? ? var stu = {

? ? ? name: '小ruikey',

? ? ? age: 1,

? ? ? gender: false,

? ? ? sayHi: function () {

? ? ? ? console.log('汪汪~~~~' + this.name);

? ? ? }

? ? };

? ? console.log(stu.name);

? ? console.log(stu.age);

? ? console.log(stu.gender);

? ? // 【this口訣】 函數(shù)方法 在調(diào)用的時候,誰.出的這個方法,方法中的this就是誰!?。?---------------

? ? // 下句代碼中 ,sayHi 方法 里的 this 就是 stu 對象!??!

? ? stu.sayHi();

? ? console.log('window.stu.sayHi(); ----');

? ? window.stu.sayHi();

? 11批量創(chuàng)建對象:工廠函數(shù)

// var stu1 = {

? ? //? name: '小白',

? ? //? age: 21,

? ? //? gender: true,

? ? //? sayHi: function () {

? ? //? ? console.log('我是小白~~');

? ? //? }

? ? // };

? ? // var stu2 = {

? ? //? name: '小黑',

? ? //? age: 23,

? ? //? gender: false,

? ? //? sayHi: function () {

? ? //? ? console.log('我是小黑~~');

? ? //? }

? ? // };

? ? //簡單工廠模式 -- 批量生產(chǎn) 對象

? ? //工廠函數(shù):每次調(diào)用,內(nèi)部都會 創(chuàng)建一個對象,并 設(shè)置好 屬性的值(一般通過形參傳入),最后返回 這個對象 給 調(diào)用者

? ? // 1.用來創(chuàng)建 一個 學(xué)員對象 的 方法 --------------------------------

? ? function createStuInfo(stuName, stuAge, stuGender) {

? ? ? //1.1 創(chuàng)建對象 并設(shè)置 屬性值

? ? ? var obj = {

? ? ? ? name: stuName,

? ? ? ? age: stuAge,

? ? ? ? gender: stuGender,

? ? ? ? sayHi: function () {

? ? ? ? ? console.log('我很喜歡你~~~~');

? ? ? ? }

? ? ? };

? ? ? //1.2 將 對象 返回

? ? ? return obj;

? ? }

? ? //2.使用工廠函數(shù) 創(chuàng)建2個對象----------------------------------------

? ? var stu1 = createStuInfo('小白', 18, false);

? ? console.log(stu1);

? ? var stu2 = createStuInfo('小黑', 21, true);

? ? console.log(stu2);

12批量創(chuàng)建對象:new和構(gòu)造函數(shù)

//1. 工廠方式 批量創(chuàng)建對象 ---------------------------------------------

? ? function createStuInfo(stuName, stuAge, stuGender) {

? ? ? //1.1 創(chuàng)建一個 空對象

? ? ? var obj = new Object();

? ? ? //1.2 動態(tài) 的 為 空對象 添加 成員

? ? ? obj.name = stuName;

? ? ? obj.age = stuAge;

? ? ? obj.gender = stuGender;

? ? ? obj.sayHi = function () {

? ? ? ? console.log('我很喜歡你~~~~');

? ? ? };

? ? ? //2. 將 添加了成員的? 對象 返回

? ? ? return obj;

? ? }

? ? //2.【構(gòu)造函數(shù)】:就是用來 批量創(chuàng)建對象的一個種函數(shù)寫法 -----------------------------------------

? ? //? ? ? 命名規(guī)范:首字母 都 大寫 ,一般用 名詞

? ? //? ? ? 用法:通過 new 關(guān)鍵字 來調(diào)用

? ? function StuInfo(stuName, stuAge, stuGender) {

? ? ? this.name = stuName;

? ? ? this.age = stuAge;

? ? ? this.gender = stuGender;

? ? ? this.sayHi = function () {

? ? ? ? console.log('我很喜歡你呀~~~小狗狗');

? ? ? }

? ? }

? ? //【強(qiáng)調(diào)】構(gòu)造函數(shù) 不是用來 直接 調(diào)用的!而是 給 new 來調(diào)用的?。。?/p>

? ? // var a = StuInfo(); // var a =? undefined;

? ? //2.1 通過 new 關(guān)鍵字 來 調(diào)用 構(gòu)造函數(shù) -----------------------------------------

? ? //? 【看不到的細(xì)節(jié)】 new 關(guān)鍵字 做的四個事情:

? ? //? 2.1 偷偷的 創(chuàng)建一個 空對象

? ? //? 2.2 偷偷的 將 空對象 傳給 被調(diào)用的 構(gòu)造函數(shù) 里的 this

? ? //? 2.3 調(diào)用 構(gòu)造函數(shù),調(diào)用完后,空對象里 就有了 各種 屬性 和 方法

? ? //? 2.4 返回 對象

? ? var stu1 = new StuInfo('小狗狗', 1, false);

? ? var stu2 = new StuInfo('小貓貓', 2, true);

? ? stu1.sayHi();


? ? console.log(stu1);

? ? console.log(stu2);

13模擬new關(guān)鍵字

function StuInfo(stuName, stuAge, stuGender) {

? ? ? this.name = stuName;

? ? ? this.age = stuAge;

? ? ? this.gender = stuGender;

? ? ? this.sayHi = function () {

? ? ? ? console.log('我很喜歡你呀~~~小狗狗');

? ? ? }

? ? }


? ? //---------------模擬 new 關(guān)鍵字的 4個事情!?。。?----------

? ? // 【了解就可以,后面 js高級會詳細(xì)講解~~?。。。。 ?/p>

? ? function myNew() {

? ? ? //? 【看不到的細(xì)節(jié)】 new 關(guān)鍵字 做的四個事情:

? ? ? //? 2.1 偷偷的 創(chuàng)建一個 空對象

? ? ? var obj = {

? ? ? ? flag: '我是空對象,不要理我~~~'

? ? ? };

? ? ? //? 2.2 偷偷的 將 空對象 傳給 被調(diào)用的 構(gòu)造函數(shù) 里的 this

? ? ? //? 2.3 調(diào)用 構(gòu)造函數(shù),調(diào)用完后,空對象里 就有了 各種 屬性 和 方法

? ? ? StuInfo.call(obj, '小白', 18, false);

? ? ? //? 2.4 返回 對象

? ? ? return obj;

? ? }

? ? var o = myNew();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容