js學(xué)習(xí)筆記----進(jìn)階Day06 js面向?qū)ο蠛烷]包

面向?qū)ο?/h4>
  • 備份指針

// this在事件指令中指向事件源

// that稱為備份指針

var that = this;

面向?qū)ο笕筇匦?/h5>
  • 封裝

  • 繼承

  • 多態(tài)

面向?qū)ο蟮氖褂?/h4>
  • 容錯(cuò)處理

var option = option || {};

閉包

  • 當(dāng)一個(gè)內(nèi)部函數(shù)被其外部函數(shù)之外的變量引用時(shí),就形成了一個(gè)閉包。

function A(){
   function B(){
       console.log("Hello XMG!");
   }
   return B;
}
var b = A();
b();//Hello XMG!
  • 技法最大目的: 全局變量私有化

  • 閉包的最大用處有兩個(gè):

  1. 可以讀取函數(shù)內(nèi)部的變量

  2. 讓這些變量的值始終保持在內(nèi)存中。

所有的全局變量都是Windows屬性. 所以可以文件各個(gè)地方拿到

  • !!!在函數(shù)內(nèi)部的變量前面沒(méi)有var用來(lái)聲明就代表是全局變量

  • 函數(shù)嵌套的變量取值采用就近原則 :

  • 變量的查找過(guò)程(查找過(guò)程只能從內(nèi)部向外)

  1. 先在現(xiàn)作用域中查找(遍歷)

  2. 去父級(jí)-> 祖父級(jí)作用域查找

  3. 直到找到全局變量(Window屬性)后還木有找到就報(bào)錯(cuò)

  • 缺點(diǎn): 類似于遞歸, 浪費(fèi)性能. 所以建議盡量不要使用全局變量

  • 引入閉包 : 用于保存局部變量. 但是不能亂用, 過(guò)多容易導(dǎo)致內(nèi)存泄漏.

閉包的技術(shù)優(yōu)點(diǎn):
  1. 不污染全局空間!

  2. 內(nèi)部所有的臨時(shí)變量執(zhí)行完畢都會(huì)釋放不占內(nèi)存。

  3. 可以保存全局?jǐn)?shù)據(jù)。

  4. 更新復(fù)雜變量。

閉包寫法

(function(){})();
;(function(){})(); //標(biāo)準(zhǔn)寫法
+(function(){})();
-(function(){})();
?(function(){})();

itin 快捷鍵 for in循環(huán)

作用域鏈條
封閉作用域
  • 目的 : 全局變量私有化

高級(jí)排他--- 閉包寫法


    // 記錄選中的元素
    var seleNode = null;

    for(var i = 0; i<list.length; i++){
        var li = list[i];

        if(i == 0){
            seleNode = li;
        }

        li.onmouseover = function () {
            // 排他
            // 清空上一次的選中
            seleNode.className = '';

            // 2.設(shè)置當(dāng)前
            this.className = 'current';

            // 3.記錄當(dāng)前選中
            seleNode = this;
        }
    }

})(document,window);

高級(jí)函數(shù)節(jié)流

  • 低級(jí): 定時(shí)器(降低某個(gè)函數(shù)調(diào)用的頻率)

  • 使用了閉包, 具有擴(kuò)展性

  • 閉包傳參. 封裝后可以直接調(diào)用.


function fn(callback,del) {
    var timer = null;
    //降低這個(gè)函數(shù)調(diào)用的頻率(使用了閉包).
    return function () {
        clearTimeout(timer);
        timer = setTimeout(function () {
            if(callback) callback();
        },del);
    }
}
//只要onresize或者onscroll時(shí)調(diào)用即可.
window.onresize = fn(function () {
    console.log(1);
},200);
window.onscroll = fn(function () {
    console.log(2);
},300);

閉包傳參

  • 實(shí)現(xiàn)功能, 點(diǎn)擊圖片使其每次移動(dòng)5px

var imgs = document.getElementsByTagName('img');
imgs[0].onclick = fn(-5);
function fn(speed) {
    var num = 0;
    return function () {
        num += speed;
        this.style.left = num + 'px';
    }
}
imgs[1].onclick = fn(5);

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

  • 所有的構(gòu)造函數(shù)有一個(gè)特點(diǎn):首字母大寫

  • 在js中我們可以理解為只要執(zhí)行以后能夠返回新的對(duì)象的函數(shù)就是構(gòu)造函數(shù)

  • 構(gòu)造函數(shù)技巧的最大目的:創(chuàng)造完全獨(dú)立的對(duì)象,互相之間不影響

關(guān)鍵詞new
  • 將一個(gè)函數(shù)變成對(duì)象并返回, 在這個(gè)函數(shù)的內(nèi)部將this指向函數(shù)本身

  • 只有在和構(gòu)造函數(shù)配合的時(shí)候才有用

  • 相當(dāng)于可以化簡(jiǎn)構(gòu)造函數(shù)自己創(chuàng)造對(duì)象和返回對(duì)象的步驟。

原型屬性prototype
  • 有能力給對(duì)象添加屬性和方法
  • 不太明白用法...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡(jiǎn)單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,527評(píng)論 0 21
  • 繼承 一、混入式繼承 二、原型繼承 利用原型中的成員可以被和其相關(guān)的對(duì)象共享這一特性,可以實(shí)現(xiàn)繼承,這種實(shí)現(xiàn)繼承的...
    magic_pill閱讀 1,128評(píng)論 0 3
  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語(yǔ)言來(lái)說(shuō)都是核心的概念。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,957評(píng)論 0 5
  • 這是我給兒子制定的,沒(méi)有和他討論和商量,完全是按照自己的想法來(lái)的,估計(jì)讓他執(zhí)行會(huì)比較難! 如果這個(gè)計(jì)劃在他放假后就...
    長(zhǎng)瑞ma閱讀 423評(píng)論 1 1
  • 說(shuō)話是首歌,卻總是跑調(diào)。 環(huán)境影響說(shuō)話的心情 心情影響說(shuō)話的情緒 情緒影響說(shuō)話的音色 音色影響說(shuō)話的施收 施收影響...
    默曉旭閱讀 201評(píng)論 0 0

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