JavaScript基礎視頻教程總結(061-070章)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>061-070章總結</title>
</head>
<body>
    
<pre> 061. this
解析器在調用函數每次都會向函數內部傳遞進一個隱含的參數,
這個隱含的參數就是this,this指向的是一個對象,
這個對象咱們稱爲函數執行的 上下文對象,
根據函數的調用方式的不一樣,this會指向不一樣的對象
1.以函數的形式調用時,this永遠都是window
2.以方法的形式調用時,this就是調用方法的那個對象
</pre>
<script type="text/javascript">
    console.log("第061");
    
    function fun61(){
        console.log(this.name)
    }
    // 以函數形式調用,this是window
    fun61()
    var obj611 ={
        name:'obj611',
        sayName:fun61
    }
    var obj612 ={
        name:'obj612',
        sayName:fun61
    }
    console.log(obj611.sayName == fun61); // true
    var name = "全局name"
    // 以方法的形式調用,this是調用方法的對象
    obj611.sayName()
</script>

<pre> 062. this的補充 </pre>
<script type="text/javascript">
    console.log("第062")
    
    var age ="全局age"
    function fun62(){
        console.log(this.name)
    }
    var obj621 ={
        name:'obj621',
        sayName:fun62
    }
    var obj622 ={
        name:'obj622',
        sayName:fun62
    }
    obj621.sayName()
</script>

<pre> 063. 使用工廠方法建立對象
經過該方法能夠大批量的建立對象
</pre>
<script type="text/javascript">
    console.log("第063");
    
    function createPerson(name,age,gender){
        //建立一個新的對象 
        var obj = new Object()
        //向對象中添加屬性
        obj.name = name
        obj.age = age
        obj.gender = gender
        obj.sayName = function(){
            console.log(this.name)
        }
        //將新的對象返回
        return obj
    }
    var obj631 = createPerson("阿三",18,"")
    obj631.sayName()
</script>

<pre> 064. 構造函數
建立一個構造函數,專門用來建立Person對象的
構造函數就是一個普通的函數,建立方式和普通函數沒有區別,
不一樣的是構造函數習慣上首字母大寫
構造函數和普通函數的區別就是調用方式的不一樣
普通函數是直接調用,而構造函數須要使用new關鍵字來調用
構造函數的執行流程:
1.馬上建立一個新的對象
2.將新建的對象設置爲函數中this,在構造函數中可使用this來引用新建的對象
3.逐行執行函數中的代碼
4.將新建的對象做爲返回值返回

使用同一個構造函數建立的對象,咱們稱爲一類對象,也將一個構造函數稱爲一個類。
 咱們將經過一個構造函數建立的對象,稱爲是該類的實例

this的狀況:
1.當以函數的形式調用時,this是window
2.當以方法的形式調用時,誰調用方法this就是誰
3.當以構造函數的形式調用時,this就是新建立的那個對象
</pre>
<script type="text/javascript">
    console.log("第064");
    
    function Person01(name,age,gender){
        this.name = name
        this.age = age
        this.gender = gender
        this.sayName = function(){
            console.log(this.name)
        }
    }
    var zhangSan = new Person01("張三",30,"")
    zhangSan.sayName()
    // 使用instanceof能夠檢查一個對象是不是一個類的實例
    console.log(zhangSan instanceof Person01)
    // 全部的對象都是Object的後代
    console.log(zhangSan instanceof Object)
</script>

<pre> 065. 構造函數修改 </pre>
<script type="text/javascript">
    console.log("第065");
    /*
     * 建立一個Person構造函數
     *  - 在Person構造函數中,爲每個對象都添加了一個sayName方法,
     *      目前咱們的方法是在構造函數內部建立的,
     *          也就是構造函數每執行一次就會建立一個新的sayName方法
     *      也是全部實例的sayName都是惟一的。
     *      這樣就致使了構造函數執行一次就會建立一個新的方法,
     *          執行10000次就會建立10000個新的方法,而10000個方法都是一摸同樣的
     *          這是徹底沒有必要,徹底可使全部的對象共享同一個方法
     */
    function Person02(name,age,gender){
        this.name = name
        this.age = age
        this.gender = gender
    }
    // 向原型中添加sayName方法
    Person02.prototype.sayName = function(){
        console.log("我是" + this.name)
    }
    var liSi = new Person02("李四",25,"")
    liSi.sayName();
</script>

<pre> 066. 原型對象
原型 prototype
咱們所建立的每個函數,解析器都會向函數中添加一個屬性prototype
這個屬性對應着一個對象,這個對象就是咱們所謂的原型對象
若是函數做爲普通函數調用prototype沒有任何做用
當函數以構造函數的形式調用時,它所建立的對象中都會有一個隱含的屬性,
指向該構造函數的原型對象,咱們能夠經過__proto__來訪問該屬性
原型對象就至關於一個公共的區域,全部同一個類的實例均可以訪問到這個原型對象,
咱們能夠將對象中共有的內容,統一設置到原型對象中。
當咱們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,若是有則直接使用,
若是沒有則會去原型對象中尋找,若是找到則直接使用
之後咱們建立構造函數時,能夠將這些對象共有的屬性和方法,統一添加到構造函數的原型對象中,
這樣不用分別爲每個對象添加,也不會影響到全局做用域,就可使每一個對象都具備這些屬性和方法了
</pre>
<script type="text/javascript">
    console.log("第066");
    
    function MyClass(){
        
    }
    MyClass.prototype.a = "prototype的a"
    MyClass.prototype.sayHello = function(){
        console.log("hello")
    }
    
    var mc01 = new MyClass()
    console.log(MyClass.prototype)
    console.log(mc01.__proto__ == MyClass.prototype)
    mc01.a = "mc01的a"
    console.log(mc01)
    mc01.sayHello()
</script>

<pre> 067. 原型對象2
原型對象也是對象,因此它也有原型,
當咱們使用一個對象的屬性或方法時,會如今自身中尋找,
自身中若是有,則直接使用,
若是沒有則去原型對象中尋找,若是原型對象中有,則使用,
若是沒有則去原型的原型中尋找,直到找到Object對象的原型,
Object對象的原型沒有原型,若是在Object原型中依然沒有找到,則返回undefined
</pre>
<script type="text/javascript">
    console.log("第067");
    
    function MyClass02(){
        
    }
    MyClass02.prototype.name = "prototype的name"
    var mc02 = new MyClass02()
    mc02.age = 18
    // 使用in檢查對象中是否含有某個屬性時,若是對象中沒有可是原型中有,也會返回true
    console.log(mc02)
    console.log("name" in mc02) // true
    //可使用對象的hasOwnProperty()來檢查對象自身中是否含有該屬性
    console.log(mc02.hasOwnProperty("age")) // true
    console.log(mc02.hasOwnProperty("name")) // false
    console.log(mc02.hasOwnProperty("hasOwnProperty")) // false
    
    console.log( mc02.__proto__.hasOwnProperty("hasOwnProperty") ) // false
    console.log( mc02.__proto__.__proto__.hasOwnProperty("hasOwnProperty") ) // true
    console.log( mc02.__proto__.__proto__.__proto__ ) // null
    
    console.log(MyClass02)
    console.log(MyClass02.hasOwnProperty("name")) // true
    console.log(MyClass02.hasOwnProperty("toString")) // false
    console.log(MyClass02.hasOwnProperty("hasOwnProperty")) // false
    console.log(Object)
    console.log(Object.hasOwnProperty("hasOwnProperty")) // false
    console.log(Object.prototype.hasOwnProperty("hasOwnProperty")) // true
</script>

<pre> 068. toString()
當咱們直接在頁面中打印一個對象時,事件上是輸出的對象的toString()方法的返回值
若是咱們但願在輸出對象時不輸出[object Object],能夠爲對象添加一個toString()方法
</pre>
<script type="text/javascript">
    console.log("第068");
    
    function Person03(name,age,gender){
        this.name = name
        this.age = age
        this.gender = gender
    }
    console.log(Person03)
    // 修改Person03原型的toString
    Person03.prototype.toString = function(){
        return "Person03 [ name=" +this.name +" ,age= "+this.age +",gender= " + this.gender +"]"
    }
    
    var wangSan = new Person03("王三",20,"")
    var result = wangSan.toString()
    console.log(result)
</script>

<pre> 069. 垃圾回收
垃圾回收(GC:garbage collection)
- 就像人生活的時間長了會產生垃圾同樣,程序運行過程當中也會產生垃圾
這些垃圾積攢過多之後,會致使程序運行的速度過慢,
因此咱們須要一個垃圾回收的機制,來處理程序運行過程當中產生垃圾
- 當一個對象沒有任何的變量或屬性對它進行引用,此時咱們將永遠沒法操做該對象,
此時這種對象就是一個垃圾,這種對象過多會佔用大量的內存空間,致使程序運行變慢,
因此這種垃圾必須進行清理。
- 在JS中擁有自動的垃圾回收機制,會自動將這些垃圾對象從內存中銷燬,
咱們不須要也不能進行垃圾回收的操做
- 咱們須要作的只是要將再也不使用的對象設置null便可
</pre>
<script type="text/javascript">
    console.log("第069");
    
    var obj69 = new Object();
    //對對象進行各類操做
    obj69 = null;
    console.log(obj69)
</script>

<pre> 070. 數組簡介
數組(Array)
- 數組也是一個對象
- 它和咱們普通對象功能相似,也是用來存儲一些值的
- 不一樣的是普通對象是使用字符串做爲屬性名的,
而數組時使用數字來做爲索引操做元素
索引:
從0開始的整數就是索引
- 數組的存儲性能比普通對象要好,在開發中咱們常用數組來存儲一些數據
</pre>
<script type="text/javascript">
    console.log("第070");
    //建立數組對象
    var arr = new Array()
    // 使用typeof檢查一個數組時,會返回object
    console.log(typeof arr)
    console.log(arr instanceof Object) // true
    console.log(arr instanceof Function) //false
    //向數組中添加元素  語法:數組[索引] = 值
    arr[0] = 0
    arr[1] = 1
    arr[5] = 5
    arr[10] = 10
    // 讀取數組中的元素 語法:數組[索引]  若是讀取不存在的索引,他不會報錯而是返回undefined
    console.log(arr[1])
    console.log(arr[2]) // undefined
    // 可使用length屬性來獲取數組的長度(元素的個數) 語法:數組.length
    // 對於連續的數組,使用length能夠獲取到數組的長度(元素的個數)
    // 對於非連續的數組,使用length會獲取到數組的最大的索引+1 , 儘可能不要建立非連續的數組
    console.log("arr長度= " + arr.length) // 11
    // 若是修改的length大於原長度,則多出部分會空出來
    // 若是修改的length小於原長度,則多出的元素會被刪除
    arr.length = 20
    console.log(arr.length) // 20
    console.log(arr) // [0, 1, empty × 3, 5, empty × 4, 10, empty × 9]
    //向數組的最後一個位置添加元素
    //語法:數組[數組.length] = 值;
    arr[arr.length] = 70
    console.log(arr) // [0, 1, empty × 3, 5, empty × 4, 10, empty × 9, 70]
    arr[arr.length] = 80
    console.log(arr) // [0, 1, empty × 3, 5, empty × 4, 10, empty × 9, 70, 80]
</script>

</body>
</html>

全部基礎課程連接:javascript


 1.JavaScript基礎視頻教程總結(001-010章)           2.JavaScript基礎視頻教程總結(011-020章)          3. JavaScript基礎視頻教程總結(021-030章)        4. JavaScript基礎視頻教程總結(031-040章)html

5. JavaScript基礎視頻教程總結(041-050章)           6. JavaScript基礎視頻教程總結(051-060章)         7. JavaScript基礎視頻教程總結(061-070章)        8. JavaScript基礎視頻教程總結(071-080章)java

9. JavaScript基礎視頻教程總結(081-090章)          10. JavaScript基礎視頻教程總結(091-100章)        11. JavaScript基礎視頻教程總結(101-110章)      12. JavaScript基礎視頻教程總結(111-120章)數組

13. JavaScript基礎視頻教程總結(121-130章)        14. JavaScript基礎視頻教程總結(131-140章)函數


 另外,歡迎關注個人新浪微博性能

相關文章
相關標籤/搜索