functionstart(uname, age) var zjl = new start('zjl', '41');var reol = new start('reol', '22');
以上的建構函式中,new了zjl和reol兩個物件,存在乙個sayhai的方法,二者的內容一樣,但由於方法為複雜資料型別,會分別開闢乙個新的記憶體空間,白白浪費了記憶體,可以使用建構函式內建的屬性prototype,將一些不變的方法定義在其原型物件上,達到節省記憶體的目的
functionstart(uname, age) //核心
start.prototype.sayhai = function() var zjl = new start('zjl', '41');var reol = new start('reol', '22');
zjl.sayhai();
最後的輸出正常,但記憶體被節省了
其構造出來的物件之所以能呼叫prototype,是因為zjl中系統自動新增了指向prototype的原型物件的屬性,__proto__
__proto__與prototype是等價的,console.log(zjl.__proto__===star.prototype);輸出為true
系統會在prototype和__proto__中自動新增constructor的屬性,其指向原來的建構函式即star
輸出console.log(zjl.__proto__.constructor);
輸出結果為:
但是,如果這樣賦值,則會自動覆蓋掉系統生成的constructor
start.prototype ={
sayhi:function() {
console.log('hi');
則輸出 console.log(zjl.__proto__.constructor);會提示錯誤
原型鏈:
mysql 建構函式 建構函式
建構函式主要是用來建立物件時為物件賦初值來初始化物件。總與new運算子一起使用在建立物件的語句中 a a new a 建構函式具有和類一樣的名稱 但它是乙個函式具有函式的所有特性,同乙個類裡面可以有多個引數不同的建構函式,也就是函式的多型。建構函式是在例項化類時最先執行的方法,通過這個特性可以給物件...
建構函式 拷貝建構函式 賦值建構函式
class和struct很大乙個區別在於,c除了成員的訪問控制許可權,struct中的成員預設是public,而class中的field預設是private class還有乙個special的地方是它有建構函式 constructor。建構函式是class中的一員,和成員變數 其他成員函式一起構成乙...
構造函式呼叫建構函式
題目如下 問下列 的列印結果為0嗎?include stdlib.h include iostream using namespace std struct clscls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,...