1.函數原型prototype設置的對象是只讀類型,所以不能修改(即棧只讀)。但是我們常常可以看到它被“修改‘’了。若對象中定義的屬性和原型中屬性一樣,優先使用自定義屬性。 例如代碼: 輸出結果為: 但是它們修改的方式是不一樣的。 studentsName指向的數組不能變,但是數組成員可以變。例如s ...
1.函數原型prototype設置的對象是只讀類型,所以不能修改(即棧只讀)。但是我們常常可以看到它被“修改‘’了。若對象中定義的屬性和原型中屬性一樣,優先使用自定義屬性。
例如代碼:
//原型 類似於父類 function students() { this.major= '數學'; this.studentsName = ['張三','李四','王五']; } var myStudents = new students(); //必須建立實例對象 才能被其他對象'繼承'; //建立對象 function teacher(sub) { } teacher.prototype = myStudents;//設置原型 var mathTeacher = new teacher(); //創建對象 mathTeacher.studentsName[0] = '趙六'; var englishTeacher = new teacher(); //創建對象 englishTeacher.major = 'English'; alert('studentsName=' + mathTeacher.studentsName + " " + 'major=' + mathTeacher.major);//輸出結果 alert('studentsName=' + englishTeacher.studentsName + " " + 'major=' + englishTeacher.major);//輸出結果
輸出結果為:
但是它們修改的方式是不一樣的。
mathTeacher.studentsName[0] = '趙六';
studentsName指向的數組不能變,但是數組成員可以變。例如studentsName指向三年二班,你就不能讓它重新指向四年一班。但是三年二班的學生改變了,studentsName還是指向三年二班沒有改變。(這涉及棧堆問題)
englishTeacher.major = 'English';
這並沒有改變原型中的major,只是對象新建了一個和原型中的major同名的屬性,根據原則優先使用自定義屬性。
2.innertext和innerHTML屬性的區別:
給innertext任何值都將視為文本,並以文本的形式完整的輸出。
而innerHTML能判斷給的值是否是標簽,若是轉為標簽。例如
<script type="text/javascript"> //頁面載入完成後執行 window.onload = function () { window.p1.innerText = "<a href='" + 'http://www.baidu.com' + "'>"+'百度'+'</a>'; window.p2.innerHTML = "<a href='" + 'http://www.baidu.com' + "'>" + '百度' + '</a>'; } </script> </head> <body> <!--第一個p標簽 用於測試innerText--> <p id="p1"> </p> <!--第一個p標簽 用於測試innerHTML--> <p id="p2"> </p> </body>
運行結果為
3.一個需要圖片跟著滑鼠移動的需求,使用document.body.onmousemove發現不太理想,於是使用了document.onmousemove達到了效果。於是稍微琢磨了一下兩者的區別。
在給document.body使用background-color染色時發現是整個屏幕染色。但是實際上document.body只有圖片大小(本例中),只有滑鼠在圖片中移動時圖片才會跟著移動。所以應該是body中有多少元素就撐多大。教程中說的body 的width 是不受限制,實際測試中也是受限制的(時代在變化?)。
而document.onmousemove是針對整個屏幕的事件。所以根據需求做不同的選擇吧。
4.在設置元素大小時發現不是直接在元素中設定的style屬性,無法直接使用xxx.style.heigth獲得 ,得使用xxx.offsetHeigth獲得。寬也一樣。