new與建構函式

2022-06-29 16:33:15 字數 1659 閱讀 2815

function

cat(name,age)

//機制1:每乙個函式物件都有乙個prototype物件

console.log(cat.prototype) //

node輸出: {}

cat.prototype.get_name = function

()//

機制2:new關鍵字+建構函式

//step1:建立了乙個新的物件{},該物件預設擁有__propto__物件

//step2:建構函式的this指向新的物件{} this--->{}

//step3:建構函式的prototype物件複製給新的物件{}的__propto__

//step4:返回新的物件

//這個新的物件成為該建構函式的例項

let cat1 = new cat('baizhu',1)

console.log(cat1)

const cat2 = new cat('heizhu',2)

console.log(cat2)

console.log(cat2.__proto__)

//機制3:搜尋機制(例項的屬性方法搜尋優先順序)

//在呼叫例項的屬性方法時,優先搜尋例項自己的屬性和方法,如果沒有再去__proto__裡找

let cat3 = new cat('dawang',3)

cat3.name = 4cat3.get_name = function

() console.log(cat3.name)

//node輸出:4

console.log(cat3.get_name()) //

node輸出:我自己的方法:4

//高階:如何手寫乙個函式,讓它具備new+建構函式的功能(舉個例子,如何建立乙個new_cat函式,讓它具備new cat()功能?)

function

new_cat(name,age),該物件預設擁有__propto__物件

let newobj ={}

newobj.__propto__ ={}

//step2:建構函式的this指向新的物件{} this--->{}

cat.call(newobj,name,age)

//step3:建構函式的prototype物件淺複製給新的物件{}的__propto__

for(let key in

cat.prototype)

//為什麼上面那一步不是newobj.__propto_ = cat.prototype ?因為這裡是淺複製而不是直接賦值

return

newobj

}console.log(new_cat('shouxie',5))

/*node輸出:

,name: 'shouxie',

age: 5

}*///

如果重新定義例項的__proto__裡的方法會發生什麼?

new cat('baizhu',1).__proto__.get_name = function

() console.log(

new cat('baizhu',1).get_name())

/*node輸出:手動改變了_propto_:baizhu

*/

new與預設建構函式

class a private int a,b class b int main a pa new a 10 b pb new b 10 delete pb vectorva 100 vectorvb 100 a c a 使用系統提供的行為,不能叫預設拷貝建構函式,叫 預設按成員初始化 return...

建構函式 new與this的解釋

1.什麼是建構函式?構造,就是初始化的意思 建構函式,是指 結合new建立物件 並 初始化物件裡各種屬性的 函式 在 new 物件時,跟在 new 後面的函式 就叫建構函式 2.a.命名規範 首字母都大寫,且一般為名詞 b.用法 通過new關鍵字來呼叫 強調 c.用法 為 new 關鍵字建立的空物件...

js建構函式建立物件加new與不加new的問題

今天看到這樣一道題 填寫 to do 處的內容讓下面 支援a.name name1 b.name name2 function obj name obj.to do name2 var a obj name1 var b new obj 問題1 new操作符做了些什麼呢?建立乙個新物件 將建構函式的...