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];
}
}