原型和原型鏈

2022-09-03 00:21:26 字數 1479 閱讀 9271

一.建構函式

1.建構函式最好大寫開頭

建構函式末尾一行預設有return this,故可理解為加了this為公用屬性,沒加this為私有屬性。

1

function

f()10

11var f = new

f();

1213 console.log(f.age)//

undefined

1415 console.log(f.name)//

"chen"

2.new 乙個物件的過程

1.把引數傳進去

2.函式裡面的this先變成乙個空物件

3.屬性賦值

4.預設把this return出來

5.把this賦值給f

3.從易讀性和效能上考慮,都選擇採用前面的寫法

var a = {}是var a = new object()的語法糖

var a = 是var a = new array()的語法糖

var function a(){} 是 var a = new function()的語法糖

使用instanceof判斷乙個函式是否是乙個變數的建構函式

functtion()建構函式的前n個為傳入的引數,最後乙個為函式體。引數都為字串。

1

new function("a", "b", "c", "return a+b+c") 23

new function("a, b, c", "return a+b+c") 45

new function("a,b", "c", "return a+b+c")

4.5條原型規則

1.所有的引用型別(陣列 函式 物件)(除了「null」以外),都具有物件特性,即可自由擴充套件屬性;

2.所有的引用型別,(陣列 函式 物件)(除了「null」以外),都有乙個__proto__(隱式原型,瀏覽器幫我們擴充套件的)(前後各兩條下劃線,共四條下劃線)屬性,屬性值是乙個普通的物件。

3.所以的函式都有乙個prototype屬性(顯式原型,瀏覽器幫我們拓展了),屬性值是乙個普通的物件。

4.所有的引用型別(陣列 物件 函式),__proto__屬性值指向它的建構函式的「prototype」屬性值      「===」

5.當試圖得到乙個物件的某個屬性時,如果這個物件本身沒有這個屬性,那麼會去它的__proto__(即它的建構函式的prototype)中尋找。

不管是原型中定義的函式,還是屬性定義的函式,this都指向物件。

迴圈物件自身的屬性 

1

varitem23

for(item in

f)10

11 }

5.instanceof

用於判斷 引用型別 屬於哪個建構函式 的方法

f instanceof foo  的判斷邏輯是:

f 的__proto__一層一層往上,能否對應到foo的prototype

原型 和 原型鏈

每乙個js物件 null除外 都和另乙個物件相關聯。另乙個 物件就是我們熟知的原型,每乙個物件都從原型繼承屬性。所有通過物件直接量建立的物件都具有同乙個原型物件,並可以通過js object.prototype 獲得對原型物件的引用。通過關鍵字new和構造函式呼叫建立的物件的原型就是建構函式的 pr...

原型和原型鏈

原型鏈 例項物件與原型之間的連線,叫做原型鏈 function human human.prototype.age 22 var a new human console.log a.age 這裡的age掛載到了human的原型上面了。其實原型就是乙個物件。a為什麼能找到原型上面的物件呢?這裡例項物件...

原型和原型鏈

建構函式 function foo name age function 其實是 var a new object 的語法糖 var a 其實是 var a new array 的語法糖 function foo 其實是 var foo new function 的語法糖 new乙個物件的過程 建立乙...