game.prototype.restart = function () , 0);
};執行上面的**將會出現如下錯誤:
uncaught typeerror:undefined is not a function
為什麼會有這個錯? this是指代當前物件本身,this的呼叫和它所在的環境密切相關。上面的錯誤是因為在呼叫settimeout函式的時候,實際呼叫的是window.settimeout,而在window中並沒有clearboard();這個方法;
下面提供兩種解決的方法。
1,將當前物件儲存在乙個變數中,這樣可以在不同的環境被繼承。
game.prototype.restart = function() , 0);
}; //改變了作用的物件
2,使用bind()方法, 不過這個相比上一種會複雜,bind方法官方解釋: msdn.microsoft.com/zh-cn/library/ff841995
game.prototype.restart = function () ;
game.prototype.reset = function() ;
2 傳統程式語言的生命週期誤區
在js中變數的生存週期與其他語言不同,舉個例子
for (var i=0; i<10;i++)
console.log(i); //並不會提示 未定義,結果是10
在js中這種現象叫:variable hoisting(宣告提前)
可以使用let關鍵字。
3 記憶體洩漏
在js中無法避免會有記憶體洩漏,記憶體洩漏:占用的記憶體,但是沒有用也不能及時**的記憶體。
例如以下函式:
var thething = null;如果執行這段**,會造成大量的記憶體洩漏,光靠garbage collector是無法完成**的,**中有個建立陣列物件的方法在乙個閉包裡,這個閉包物件又在另乙個閉包中引用,,在js語法中規定,在閉包中引用閉包外部變數,閉包結束時對此物件無法**。var replacething = function() ;
}; thething =
} setinterval(replacething, 1000);
4 比較運算子
console.log(false == 『0』); // true以上就是比叫容易出錯的地方,還有強制型別轉換等;有乙個型別比較例外:nan 及和自己不等,也和其他值都不等。只能用isnan()來做判斷。console.log(null == undefinded); //true
console.log(」 \t\r\n」 == 0); // true
console.log(「」 == 0); //true
if ({}) // … true
if () // …. true
5 低效的dom操作
js中經常進行這些dom操作,如何有效的進行是個難題,可以使用document.fragments:
var div = document.getelementsbytagname(「my_div」);這樣做可以減少很多次dom操作;var fragment = document.createdoucmentfragment();
// elems 就是要新增的元素,,比如可以將這些元素放在乙個物件陣列中,及elems
6 在for迴圈中的不正確函式使用
例如:這是乙個典型的錯誤
var elements = document.getelementsbytagname(『div』);var n = elements.length;
var makehandler = function(num)
}
JavaScript中常見的HTML DOM操作
dom是文件物件模型 document object model 的縮寫,dom 定義了訪問 html 和 xml 文件的標準 w3c 文件物件模型 dom 是中立於平台和語言的介面,它允許程式和指令碼動態地訪問和更新文件的內容 結構和樣式。以下是一段html的 鏈結 同時,dom解析html文件在...
JavaScript中常見獲取元素的方法及其拓展
常見的獲取元素的方法有3種,分別是通過元素id 通過標籤名字和通過類名字來獲取。dom提供了乙個名為getelementbyid的方法,這個方法將返回乙個與之對應id屬性的節點物件。使用的時候請注意區分大小寫。它是document物件特有的函式,只能通過其來呼叫該方法。其使用的方法如下 docume...
JavaScript中常見的設計模式(3)原型模式
原型模式 在上一章節中已經說過原型模式解決了構造模式和工廠模式的不足之處。function person person.prototype.name yuan xing person.prototype.age 23 person.prototype.job software engineer pe...