JS : 面向?qū)ο?屬性判斷-call()-apply()-bind()-繼承

面向?qū)ο?/h3>
  • 類,原型患雇,實例三者打交道
  • 類里面存放的都是私有屬性和方法
  • 原型prototype上存的都是公有的屬性和方法
  • 類里面的this都指向?qū)嵗?/li>
  • 類里面的this跟var沒有任何關(guān)系妈经,var是用來預(yù)解釋的
  • 類里面會自動幫我們創(chuàng)建和返回this

對象:屬性 和 方法

寫面向?qū)ο蟮男「[門

  • 把全局變量都作為私有屬性
  • 把全局函數(shù)都作為公有方法
  • 面向?qū)ο笾械膖his淮野,永遠(yuǎn)執(zhí)行實例

屬性判斷:判斷某個屬性,是否在某個對象上

  • in 公有+私有:"attr" in obj => true / false
  • hasOwnProperty 是否為私有: fl.hasOwnProperty('attr')=>true / false
  • hasPubProperty 是否為公有(不是系統(tǒng)提供的吹泡,是自己寫的)
    • 思路:必須是元素身上的屬性骤星,并且不是私有屬性
    function hasPubProperty(attr,obj){
        if(attr in obj && !obj.hasOwnProperty(attr)){
            return attr;
        }
    }
    
  • isPropertyOf 判斷是否在原型鏈上:obj1.isPropertyOf(boj2)

循環(huán)遍歷

  • for...in...循環(huán):只能遍歷自己給對象添加的私有屬性+公有屬性,不能遍歷對象的系統(tǒng)屬性
  • hasOwnProperty和propertyIsEnumerable爆哑,都可以遍歷自己定的私有屬性洞难,不能遍歷公有屬性和系統(tǒng)自帶的屬性

關(guān)于Object和Function之間的關(guān)系

  • 對象的老大 Object
  • 函數(shù)的老大 Function
  • Object是Function的爹
  • Function是Object這個基類的爹
  • Object.prototype是Function.prototype的爹
    • 所有的對象,都可以使用Object.prototype上的方法
    • 但是揭朝,只有函數(shù)數(shù)據(jù)類型队贱,才能使用Function。prototype的方法潭袱,因為所有函數(shù)數(shù)據(jù)類型是Function這個類的實例

函數(shù)的三種角色

  • 普通函數(shù)->作用:預(yù)解釋 作用域鏈 上級作用域 代碼從上到下執(zhí)行
  • 類->作用:類 原型 實例 原型鏈
  • 對象->作用:跟普通的對象一樣柱嫌, 都可以添加屬性和方法

Function.prototype

  • Function.prototype雖然是個匿名函數(shù),但是他具有普通prototype一樣的功能

call apply bind

  • fa.call():有兩類參數(shù)
    • 第一個參數(shù):用來改變call前面函數(shù)中this關(guān)鍵字的指向
    • 從第二個參數(shù)開始:給call前面的函數(shù)從左到右屯换,一個個的傳參
    • call改完this编丘,傳完參數(shù)之后与学,函數(shù)會“立即執(zhí)行”
  • fa.apply():有兩個參數(shù) -> 跟call功能一樣,但是傳參形式不同
    • 第一個參數(shù):用來改變apply前面函數(shù)中this關(guān)鍵字的執(zhí)行
    • 第二個參數(shù)(數(shù)組):也是給apply前面的函數(shù)從左到右嘉抓,一個個的傳參
  • fa.bind():預(yù)處理機(jī)制
    • 參數(shù)跟call一樣
    • bind()給前面的函數(shù)索守,改完this,傳完參后抑片,不會立即執(zhí)行卵佛,只會返回一個函數(shù)的定義階段;
      • 在需要的地方調(diào)用

this小總結(jié)

  • 當(dāng)元素身上的事件被觸發(fā)的時候敞斋,會執(zhí)行一個函數(shù)截汪,函數(shù)中的this執(zhí)行當(dāng)前這個元素
  • 當(dāng)函數(shù)被調(diào)用的時候,看前面是否有點渺尘,點前面是誰挫鸽,this就是誰,沒有點鸥跟,this就是window
  • 自執(zhí)行函數(shù)中的this丢郊,永遠(yuǎn)指向window
  • 回調(diào)函數(shù)中的this,一般指向window医咨,但是可以通過thisArg更改this指向
  • 構(gòu)造函數(shù)中的this枫匾,指向?qū)嵗?/li>
  • 當(dāng)遇到call、apply拟淮、bind的時候干茉,以上規(guī)則全失效,他們?nèi)齻€就是用來更改this指向的

繼承

  • call繼承:子類只繼承父類“私有”的屬性和方法很泊,不繼承公有
<script>
    function F(){
        this.x = 100;
        this.y = 200;
    }
    F.prototype.a = 111;
    F.prototype.showX = function(){};
    var f1 = new F;
    console.dir(f1);
    function Son(){
        F.call(this);
    }
    var s1 = new Son;
    console.dir(s1);
</script>
  • 拷貝繼承:子類只繼承父類“公有”的屬性和方法角虫,不繼承私有
<script>
    // 通過此方法繼承的公有在第一個__proto__上
    function extend(obj1,obj2) {
        for(var attr in obj2){
            obj1[attr] = obj2[attr];
        }
        return obj1;
    }
    function F() {
        this.x = 100;
        this.y = 100;
    }
    F.prototype.a = 123;
    F.prototype.showX = function(){};
    var f1 = new F;
    console.dir(f1);
    function S(){}
    extend(S.prototype,F.prototype);
    var s1 = new S;
    console.dir(s1);
</script>
  • 原型鏈繼承:子類把父類私有和公有的屬性和方法,都放在自己的prototype上
<script>
    //通過此方法繼承委造,公有在__proto__找到的__proto__上
   function extend(obj){
        function Tmp() {}
        Tmp.prototype = obj.prototype;
        return new Tmp;
    }
    function F(){
        this.x = 100;
        this.y = 200;
    }
    F.prototype.a = 111;
    F.prototype.showX = function(){};
    var f1 = new F;
    console.dir(f1);
    function S(){};
    S.prototype = new F;
    var s1 = new S;
    console.dir(s1);
</script>
  • 混合式繼承:call繼承+拷貝繼承
    // 最后S繼承的屬性位置和F一樣
    function extend(obj1,obj2) {
        for(var attr in obj2){
            obj1[attr] = obj2[attr];
        }
        return obj1;
    }
    function F() {
        this.x = 100;
        this.y = 100;
    }
    F.prototype.a = 123;
    F.prototype.showX = function(){};
    var f1 = new F;
    console.dir(f1);

    function S(){
        F.call(this);
    }
    extend(S.prototype,F.prototype);
    var s1 = new S;
    console.dir(s1);
  • 寄生式組合繼承
    function setCreat(obj){
        function Tmp(){}
        Tmp.prototype = obj.prototype;
        return new Tmp();
    }
    function F() {
        this.a = 1;
        this.b = 2;
    }
    F.prototype.c = 3;
    F.prototype.d = function () {};
    var f1 = new F;
    console.dir(f1);

    function Son(){
        F.call(this);
    }
    Son.prototype = setCreat(F);
    var s1 = new Son;
    console.dir(s1);

可視區(qū)的寬度和高度

  • 寬度:document.documentELement.clientWhidth || document.body.clientWidth
  • 高度:document.documentElementlientHeight || document.body.clientHeight
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戳鹅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昏兆,更是在濱河造成了極大的恐慌枫虏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爬虱,死亡現(xiàn)場離奇詭異隶债,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跑筝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門死讹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曲梗,你說我怎么就攤上這事回俐」渫龋” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵仅颇,是天一觀的道長。 經(jīng)常有香客問我碘举,道長忘瓦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任引颈,我火速辦了婚禮耕皮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝙场。我一直安慰自己凌停,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布售滤。 她就那樣靜靜地躺著罚拟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪完箩。 梳的紋絲不亂的頭發(fā)上赐俗,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音弊知,去河邊找鬼阻逮。 笑死,一個胖子當(dāng)著我的面吹牛秩彤,可吹牛的內(nèi)容都是我干的叔扼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼漫雷,長吁一口氣:“原來是場噩夢啊……” “哼瓜富!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起珊拼,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤食呻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澎现,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仅胞,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年剑辫,在試婚紗的時候發(fā)現(xiàn)自己被綠了干旧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡妹蔽,死狀恐怖椎眯,靈堂內(nèi)的尸體忽然破棺而出挠将,到底是詐尸還是另有隱情,我是刑警寧澤编整,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布舔稀,位于F島的核電站,受9級特大地震影響掌测,放射性物質(zhì)發(fā)生泄漏内贮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一汞斧、第九天 我趴在偏房一處隱蔽的房頂上張望夜郁。 院中可真熱鬧,春花似錦粘勒、人聲如沸竞端。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽事富。三九已至,卻和暖如春埃撵,著一層夾襖步出監(jiān)牢的瞬間赵颅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工暂刘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留饺谬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓谣拣,卻偏偏與公主長得像募寨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子森缠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容