functioncat(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操作符做了些什麼呢?建立乙個新物件 將建構函式的...