JavaScript裏類的相關知識

function start(a,b){
    this.a=a;
    this.b=b;
    this.c=function(){
        console.log(this.a+this.b);
    }
}
var b=new start(1,2)

這裏寫圖片描述

1.對象
1.1 創建對象
總的說來就三種形式:
直接量:var a={x:0,y:0}
通過new構造函數
通過Object.create()
但細分又有很多種,可以看我的這篇博客

2.原型
每一個JavaScript對象都與另一個對象相關聯,“另一個對象”即爲原型
通過關鍵詞new+構造函數方式創建的對象的原型就是構造函數的prototype屬性值
b.__proto__==start.prototype => true
這裏寫圖片描述

3.prototype和[[Prototype]]
[[Prototype]],這個是實例中擁有的屬性,它是一個指針,指向構造函數的原型,它是“內部的”,這個特性是爲了實現Javascript引擎用的,因此在Javascript中不能直接訪問它,同時爲了表示特性是內部值,用兩個方括號加以區分。Firefox,Safari,Chrome在每個對象上面都支持一個__proto__,可以當做[[Prototype]]。
prototype是構造函數中的屬性,它也是一個指針,也指向構造函數原型。但它是可見的。任何js函數都可以作爲構造函數,因此每個js函數都會自動擁有一個prototype

b.prototype => undefined
b.__proto__ => 輸出一個對象
start.prototype => 輸出一個對象

var c={};
c.__proto__=b;
c.a => 1;
b.e=12;
c.e=12;

start.prototype.what=function(){return this.a*this.b};
b.what() => 2;
c.what() => 2;

這裏寫圖片描述
這裏寫圖片描述

4.constructor屬性
每個js函數都會自動擁有一個prototype屬性,該屬性的值是一個對象,這個對象包含一個不可枚舉屬性constructor,而且這個屬性的值是一個函數對象
這裏寫圖片描述
*what屬性是上一步添加的
通過構造函數創建的對象會繼承這個屬性,且屬性值指代它們的構造函數
這裏寫圖片描述

5.類的擴充
如果創建對象之後原型的屬性發生改變,也會影響到繼承這個原型的所有實例。之前第三小節舉的例子就是對類的擴充

6.instanceof運算符
該運算符左操作數是待檢測其類的對象,右操作數是定義類的構造函數。如果o繼承自c.prototype,則表達式值爲true
這裏寫圖片描述
*未完待續

發佈了66 篇原創文章 · 獲贊 47 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章