亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript的對象,成員方法在原型中的定義錯誤

javascript的對象,成員方法在原型中的定義錯誤

繁花不似錦 2019-04-23 15:35:39
寫法一代碼如下://Javascriptcode//在原型中定義成員方法functionMyObject1(){ //寫法一 MyObject1.prototype={ test:function(){ window.alert('test_1'); } };}functionMyObject2(){ //寫法二 MyObject2.prototype.test=function(){ window.alert('test_2'); };}//testvaro1=newMyObject1();varo2=newMyObject2();o1.test();//這個會報錯:testisnotafunctiono2.test();//這個正常寫法一,在瀏覽器中會報錯,說o1.testisnotafunction,這是為什么呢?寫法二,則是正確的。這兩種寫法有何不同?最好是能找到官方的文檔解釋,先謝過。
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

正確的寫法是functionObject(){
//blanblanblan
}
Object.prototype={
test:function(){
//blanblanblan
}
};你沒有弄清Javascript是如何通過構造函數來構建新的對象的。在調用newObject的時候,構造函數Object的prototype是{},為空對象。只有在該構造函數被執行一次后其原型才為{test:function(){}}。你可以嘗試一下//Javascriptcode
functionObject(){
Object.prototype={
test:function(){
window.alert('test');
}
};
}
//test
varo=newObject();
o=newObject();
o.test();這時候test方法是存在的。
還有一個注意點是,請不要使用Object作為構造函數的名稱,因為Javascript原生構造函數中已經有Object
                            
查看完整回答
反對 回復 2019-04-23
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

原型鏈的概念理解錯誤
MyObject1本身只是構造函數,不存在于原型鏈中。
o1=newMyObject1()創建了一個基于MyObject1.prototype的實例,MyObject1執行時又覆蓋它。導致o1還是基于之前的那個原型。
而MyObject2只是在原型上追加了一個method,所以沒有問題。
                            
查看完整回答
反對 回復 2019-04-23
  • 2 回答
  • 0 關注
  • 362 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號