国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

深入理解 Javascript 之 JS的封裝

張漢慶 / 3112人閱讀

摘要:封裝常見的封裝類中的共有和私有執(zhí)行結(jié)果如下原因是調(diào)用的時(shí)候,指向的其實(shí)是,因此沒有輸出解決辦法更改指向工廠函數(shù)也有對(duì)于程序員來說這三個(gè)關(guān)鍵字應(yīng)該是很熟悉的哈,但是在中,并沒有類似于這樣的關(guān)鍵字,但是我們又希望我們定義的屬性和方法有一定的訪問

封裝

常見的封裝

function Person (name,age,sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
}
 
Pserson.prototype = {
    constructor:Person,
    sayHello:function(){
        console.log("hello");
    }
}

類中的共有和私有

function Person(pname){
    var age = 10;
    function pm(){
        console.log(this.name)
    }
    
    this.name = pname;
    this.test: function(){
        console.log("public methods");
        pm();
    }
}

執(zhí)行結(jié)果如下:

(原因是 調(diào)用pm的時(shí)候,this指向的其實(shí)是window,因此沒有輸出)

解決辦法

function Person(pname){
    var age = 10;
    function pm(){
        console.log(this.name)
    }
    
    this.name = pname;
    this.test: function(){
        console.log("public methods");
        pm.call(this); // 【】更改this指向
        // pm();
    }
}

工廠函數(shù)

function Person(name){
    function pm(){
        console.log(self.name);
    }    
    var self = {
        name: name,
        test: function(){
            pm();
        }
    }
    
    return self;
}
javascript也有private public protected

對(duì)于java程序員來說private public protected這三個(gè)關(guān)鍵字應(yīng)該是很熟悉的哈,但是在js中,并沒有類似于private public protected這樣的關(guān)鍵字,但是我們又希望我們定義的屬性和方法有一定的訪問限制,于是我們就可以模擬private public protected這些訪問權(quán)限。

上栗子

var Book = function (id, name, price) {
      // private(在函數(shù)內(nèi)部定義,函數(shù)外部訪問不到,實(shí)例化之后實(shí)例化的對(duì)象訪問不到)
      var _num = 1;
      var _id = id;
      // 私有函數(shù)
      function _checkId(id) {
        console.log("private");
        console.log(_id);
        // 這里只能訪問私有變量和方法,
        // 如果訪問this.name是訪問不到的,
        // 如果訪問需要重新指向this
      }

      // protected(可以訪問到函數(shù)內(nèi)部的私有屬性和私有方法,在實(shí)例化之后就可以對(duì)實(shí)例化的類進(jìn)行初始化拿到函數(shù)的私有屬性)
      this.getName = function () {
        _checkId();
        console.log(this.name);
      }

      this.getPrice = function () {
        console.log(price);
      }

      // public
      this.name = name;
      this.copy = function () {
        console.log("this is public")
        console.log(this.name)
        console.log(price);
      }



    }

    //在Book的原型上添加的方法實(shí)例化之后可以被實(shí)例化對(duì)象繼承
    Book.prototype.profunction = function () {
      console.log("this is profunction");
    }
    //在函數(shù)外部通過.語法創(chuàng)建的屬性和方法,只能通過該類訪問,實(shí)例化對(duì)象訪問不到
    Book.setTime = function () {
      console.log("this is new time")
    }
    var book1 = new Book(1, "zjj", 2000);
    console.log(book1);
    book1.getName(); // 111 getName是protected,可以訪問到類的私有屬性,所以實(shí)例化之后也可以訪問到函數(shù)的私有屬性
    // book1._checkId();        //報(bào)錯(cuò)book1.checkId is not a function
    console.log(book1.id) // undefined id是在函數(shù)內(nèi)部通過定義的,是私有屬性,所以實(shí)例化對(duì)象訪問不到
    console.log(book1.name) //name 是通過this創(chuàng)建的,所以在實(shí)例化的時(shí)候會(huì)在book1中復(fù)制一遍name屬性,所以可以訪問到
    book1.copy() //this is public
    book1.profunction(); //this is proFunction
    Book.setTime(); //this is new time
    book1.setTime(); //報(bào)錯(cuò)book1.setTime is not a function

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

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

相關(guān)文章

  • 深入理解ES6《用模塊封裝代碼》

    摘要:導(dǎo)入模塊的代碼執(zhí)行后,實(shí)例化過的模塊被保存在內(nèi)存中,只要另一個(gè)語句引用它就可以重復(fù)使用它和的一個(gè)重要的限制是它們必須在其它語句和函數(shù)之外使用,也就是說不允許出現(xiàn)在語句中,不能有條件導(dǎo)出或以任何方式動(dòng)態(tài)導(dǎo)出。 什么是模塊 模塊是自動(dòng)運(yùn)行在嚴(yán)格模式下并且沒有辦法退出運(yùn)行的Javascript代碼 在模塊的頂部this的值是undefined 其模塊不支持html風(fēng)格的代碼注釋除非用def...

    BigTomato 評(píng)論0 收藏0
  • 深入理解ES6《用模塊封裝代碼》

    摘要:導(dǎo)入模塊的代碼執(zhí)行后,實(shí)例化過的模塊被保存在內(nèi)存中,只要另一個(gè)語句引用它就可以重復(fù)使用它和的一個(gè)重要的限制是它們必須在其它語句和函數(shù)之外使用,也就是說不允許出現(xiàn)在語句中,不能有條件導(dǎo)出或以任何方式動(dòng)態(tài)導(dǎo)出。 什么是模塊 模塊是自動(dòng)運(yùn)行在嚴(yán)格模式下并且沒有辦法退出運(yùn)行的Javascript代碼 在模塊的頂部this的值是undefined 其模塊不支持html風(fēng)格的代碼注釋除非用def...

    AbnerMing 評(píng)論0 收藏0
  • javascript知識(shí)點(diǎn)

    摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長(zhǎng)后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類型檢測(cè)惰性載入函數(shù)凍結(jié)對(duì)象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對(duì)寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...

    Karrdy 評(píng)論0 收藏0
  • JavaScript深入各種繼承

    摘要:通常有這兩種繼承方式接口繼承和實(shí)現(xiàn)繼承。理解繼承的工作是通過調(diào)用函數(shù)實(shí)現(xiàn)的,所以是寄生,將繼承工作寄托給別人做,自己只是做增強(qiáng)工作。適用基于某個(gè)對(duì)象或某些信息來創(chuàng)建對(duì)象,而不考慮自定義類型和構(gòu)造函數(shù)。 一、繼承的概念 繼承,是面向?qū)ο笳Z言的一個(gè)重要概念。通常有這兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承。接口繼承只繼承方法簽名,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法。 《JS高程》里提到:由于函數(shù)沒有簽名,...

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

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

0條評(píng)論

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