H5C3J 学习笔记 part1

出于某种原因,我决定把之前用AS实现的AStar示例,用JS再实现一遍。
环境为Mac OSX 10.8.5 + Chrome 31.0.1626.0 dev
现将实现过程中的一些要注意的问题记录如下:

关于div的绝对坐标,写成这样是不灵的:

 cube.view.style.left = 100;  
 cube.view.style.top = 100;  
`</pre>
一定不要忘记加px:

<pre>` cube.view.style.left = 100+"px";  
 cube.view.style.top = 100+"px";  
`</pre>
定义在外挂js文件中的代码,引入的时候要记得不能用单向闭合标签,例如下面是不灵的:

<pre>` <script src="Cube.js" type="text/javascript"/>  
`</pre>
要这样,而且实测加不加language,加不加type,都无所谓,反正Chrome是可以正常解析。

<pre>` <script src="Cube.js" type="text/javascript"></script>  
`</pre>
为DOM对象注册事件的一对比较通用的办法,摘录如下:

<pre>` function addEvent(obj, type, fn) {  
   if (obj.attachEvent) {  
     obj['e' + type + fn] = fn;  
     obj[type + fn] = function() {  
       obj['e' + type + fn](window.event);  
     }  
     obj.attachEvent('on' + type, obj[type + fn]);  
   } else  
     obj.addEventListener(type, fn, false);  
 }  
 function removeEvent(obj, type, fn) {  
   if (obj.detachEvent) {  
     obj.detachEvent('on' + type, obj[type + fn]);  
     obj[type + fn] = null;  
   } else  
     obj.removeEventListener(type, fn, false);  
 }  
`</pre>

关于对存有自定义对象的数组的排序:

<pre>` function testObj(f) {  
    this.f = f;  
 }  
 function sortOnF(a, b) {  
    if (b.f > a.f) {  
           return 1  
         } else if (b.f < a.f) {  
           return -1;  
         }  
         return 0;  
 }  
 function testSort() {  
         var testArr = new Array();  
         testArr[0] = new testObj(10);  
         testArr[1] = new testObj(1);  
         testArr[2] = new testObj(3);  
         for (var i = 0; i < testArr.length; i++) {  
           alert(testArr[i].f);  
         }  
         testArr.sort(sortOnF);  
         for (var i = 0; i < testArr.length; i++) {  
           alert(testArr[i].f);  
         }  
}  
`</pre>
自定义Class中,定义私有属性和函数

<pre>` function Grid(numCols, numRows) {  
   //私有属性  
   _nodes = new Array();  
   //通过公共函数访问私有属性  
   this.getNode = function(x, y) {  
     return _nodes[x][y];  
   }  
 }