什麼樣的資料需要寫在原型中?需要共享的資料就可以寫在原型中
原型的作用之一:資料共享
//屬性需要共享,方法也需要共享
//不需要共享的資料寫在建構函式中,需要共享的資料寫在原型中
//建構函式
function
student
(name,age,***)
//所有學生的身高都是188,所有人的體重都是55
//所有學生都要每天寫500行**
//所有學生每天都要吃三頓飯
//原型物件
student.prototype.height =
"188cm"
;student.prototype.weight =
"55kg"
;student.prototype.
code
=function()
student.prototype.
eat=
function()
//例項化物件,並初始化
var stu =
newstudent
("小光",19
,"男");
var stu2 =
newstudent
("小霞",20
,"女");
stu.
code()
;//小光每天需要寫500行js**
stu2.
eat();
//小霞每天需要吃三餐
console.
dir(stu)
;
從控制台輸出我們可以看到,例項物件 stu 上共享了原型物件上的屬性height 和 weight,同時共享了原型物件上的方法 code() 和 eat(),而且原型物件的constructor物件指向了建構函式student();一切都很完美。但是如果我們使用物件的方式在原型物件上定義屬性和方法,則會改變constructor的指標指向問題,需要格外注意:
student.prototype =
, eat :
function()
};
此時控制台輸出(導致constructor構造器屬性消失):
對比以上兩種實現資料共享的方法可以發現,第二種方式會導致constructor構造器屬性消失。所以我們需要手動修改構造器指向:
student.prototype =
, eat :
function()
};
此時的構造器屬性constructor指向就更正過來了,控制台輸出如下:
其實,在實際開發中我們也可以這樣,定義建構函式,也能保證,構造器擁有正確的指向。
function
student
(name,age,***)
//公共屬性
student.prototype.height =
"188cm"
;student.prototype.weight =
"55kg"
;//公共方法定義在了外面
varcode
=function()
vareat
=function()
//例項化物件,並初始化
var stu =
newstudent
("小光",19
,"男");
var stu2 =
newstudent
("小霞",20
,"女");
stu.
code()
;//小光每天需要寫500行js**
stu2.
eat();
//小霞每天需要吃三餐
console.
dir(stu)
;
此時,我們來檢視控制台,能夠看到,constructor 指向:
);//小光每天需要寫500行js**
stu2.eat();//小霞每天需要吃三餐
console.dir(stu);
此時,我們來檢視控制台,能夠看到,constructor 指向:
共享資料的保護 利用const
常物件 它的資料成員在整個的物件的生存期內不能改變。常物件必須進行初始化,而且不能被被新。宣告 常物件的語法形式為 const 型別說明符 物件名 用const 修飾的類成員 1.常成員函式 型別說明符 函式名 參數列 const void print void print const 以上兩個是對...
利用共享記憶體來恢復玩家資料
聽上去共享記憶體和遊戲不太沾邊,但在遊戲伺服器上利用共享記憶體這個技術已經不是乙個新鮮的事了,暢遊和畫素早在天龍八部和尋仙就實現了這一應用 但不一定都像下面提到的這麼用 較早之前和同事討論過如何在現有框架裡利用共享記憶體這種程序間訪問統一資料的特點,最理想的應用方案是切合目前以場景為單位的邏輯程序分...
在應用間利用KeyChain共享資料
mac os可以利用keychain儲存各應用中使用者的賬號密碼,讓使用者不用重複輸入。其實在ios中也有keychain,也可以用keychain在應用間共享資料,只是有一些限制,無法像mac os一樣開放,也無法讓使用者手動控制。那麼keychain到底如何使用呢?我們可以把keychain理解...