最后更新时间:2011年12月12日

共91条勘误信息。其中:
1、36条已经在第2次印刷(2010年9月)的版本中修正;
2、32条已经在第4次印刷(2011年4月)的版本中修正;
3、4条已经在第5次印刷(2011年8月)的版本中修正;
4、9条已经在第6次印刷(2011年10月)的版本中修正;
5、10条将在第7次印刷(2011年12月)的版本中修正。
图示说明:
1、:此错误仅存在于第1次印刷的版本中(后续印次中已修正,下同);
2、:此错误仅存在于第1、2、3次印刷的版本中;
3、:此错误存在于第1、2、3、4次印刷的版本中;
4、:此错误存在于第1、2、3、4、5次印刷的版本中;
请读者根据自己手里书的印次核对和提交勘误。
点击查看为本书提供勘误的朋友。

快速页码导航

P3(1) |P6(1) |P11(1) |P14(1) | P15(1) | P16(1) | P18(1) | P25(1) | P30(1) | P37(1) | P39(1) | P48(1) | P63(1) | P69(1) | P81(1) | P87(1) | P89(2) | P90(1) | P91(2) | P93(1) | P100(1) | P105(1) | P107(1) | P119(2) | P120(1) | P126(2) | P127(1) | P128(1) | P133(1) | P136(1) | P140(1) | P148(1) | P152(1) | P154(1) | P161(1) | P163(1) | P169(1) | P179(1) | P191(1) | P204(1) | P217(1) | P218(1) | P221(1) | P224(2) | P233(1) | P237(1) | P245(1) | P249(1) | P256(1) | P286(1) | P294(1) | P300(1) | P315(1) | P326(1) | P344(2) | P355(1) | P378(1) | P379(1) | P387(2) | P448(1) | P466(1) | P467(1) | P468(1) | P469(1) | P470(1) | P472(1) | P510(1) | P511(3) | P527(1) | P532(1) | P533(1) | P542(1) | P544(1) | P549(1) | P551(1) | P554(2) | P557(1) | P560(1) | P568(1) | P569(1) | P570(1) | P571(1) | P577(1)

P3,图1-2中:
“EMCAScript” -> “ECMAScript”

P6,正数第九行:
“……Netscapet……” -> “……Netscape……”

P11,代码,第一段中的注释:


<!- 这里放内容 -->

->


<!-- 这里放内容 -->

第二段中的注释:


<!-- <!- 这里放内容 -->

->


<!-- 这里放内容 -->

正文,倒数第一段,第一行:
“HTML4.01” -> “HTML 4.01”

P14,正文,倒数第一段:
“框架型” -> “框架集型”

P15,正文,第二段,第一行:
“超级文档模式” -> “超级标准模式”

P16,倒数第三、四行:
“……,但只有IE支持该属性。” -> “……,但只有IE和Firefox 3.5+ 支持该属性。”

P18,3.1.3,第一、二段:
“反斜杠” -> “斜杠”

P25,附注框:
“……正和负……” -> “……负和正……”

P30,3.4.7上面一段:
去掉”null”和”undefined”的引号

P37,正文第四段(图3-2下方):
“注意,左移不会影响操作数的符号位。换句话说,……。”
->
“(删除这一段。因为原文这种说法不正确。——译者注)”

P39,代码,倒数第一段,第二行:
& & -> &&

P48,3.6.3 while语句,第二行:
“因引” -> “因此”

P63,正文第一段,第五行:
“当接下再……” -> “当接下来再……”

P69,4.3.1第三段第三句:
“而在此之后再被加上标记的变量” -> “而在此之后仍带有标记的变量”

P81,页脚,“译者注”中:
value2-value1 –> value1-value2

P87,正文,项目符号后第一段:
“不同组合产生不结果,……” –> “不同组合产生不同结果,……”

P89,倒数第十六、十七行(修改后,每个字符串前面多了一个空格):


"and dad"、"and baby"、"and dad and baby"

->


" and dad"、" and baby"、" and dad and baby"
P89,倒数第一和第五行(注释0->3):


alert(pattern1.lastIndex);//0

->


alert(pattern1.lastIndex);//3

P90,第五行(注释0->3):


alert(pattern2.lastIndex);//0

->


alert(pattern2.lastIndex);//3

P91,表中,第一个单元格内:
Input -> input
第一段代码,应该如下所示(注意注释中字符串及字符串中的空格):


if (pattern.test(text)){
    alert(RegExp.input);		// "this has been a short summer"
    alert(RegExp.leftContext);	// "this has been a "
    alert(RegExp.rightContext);	// " summer"
    alert(RegExp.lastMatch);	// "short"
    alert(RegExp.lastParen);	// "s"
    alert(RegExp.multiline);	// false
}

P93,正文第二段,第二行:
“……,没用必要……” -> “……,没有必要……”

P100,正文5.6.1标题往上数4行:
“……,而且所有基本包装类型的对象都会被转换成布尔值true。”
->
“……,而且所有基本包装类型的对象在布尔环境中都会被转换成布尔值 true。”

P105页,倒数第二行:


alert(pattern.lastIndex		//0

->


alert(pattern.lastIndex);	//3

P107,第一行:
“表示应该被替换的匹配项使用函数……” -> “表示应该被替换的匹配项。使用函数……”

P119,倒数第三段,第三行:
“……在所函数的指针” -> “……所在函数的指针”

P119,这一页多次出现“原型属性”或“prototype属性”等不恰当表述,应该改为“原型对象”。为准确起见,这里给出一个与目前纸版书大致相同的PDF页面,并用修订版式标出了修改的地方(直接点击打开,右键点击选“链接另存为”可以下载):
请下载P119勘误(1页)P119页的修订页面(PDF,347KB)

P120,图 6-1:
Person1、Person2 -> person1、person2

P126,图6-3,上下两幅子图中,含有__proto__的两个方框:
“Person” -> “person”
P126,图6-3,第二个子图的标题:
“重写原型对象之前”
->
“重写原型对象之后”

P127,第20-21行,即灰色框上面倒数第一行:
“mgs” -> “msg”

P128,代码,第二段,第7行:
Person.protoype -> Person.prototype

P133,第一段第二句:
“最终结果就是这样的:instance指向……。”
->
“最终结果就是这样的:instance指向SubType的原型,SubType的原型又指向SuperType的原型。”

相应地,P133页下方的“译者注”:
“实际上,不是SubType.prototype的……。——译者注”
->
“实际上,不是SubType的原型的constructor属性被重写了,而是SubType的原型指向了另一个对象——SuperType的原型,而这个原型对象的constructor属性指向的是SuperType。——译者注”

P136,第一段代码,第二行后面的注释应该在第三行后面。

P140,图6-6,左侧第一列对象框,上数第二个对象框中的函数名称:
SubType -> SuperType。

P148,代码第一段,倒数第二行:


document.write(funcs[i]() + "<br />");

改为:


document.write(funcs[i](i)() + "<br />");

P152,代码三中的注释。
//函数的私有变量 -> //私有变量和私有函数

P154,第一段代码,倒数第二行:alert(person1)…->alert(person)…

P161,倒数第三段,倒数第二行:
“在Firefox和Safari中,screenTop……”
->
“在Firefox和Safari中,screenY或screenTop……”

P163,第二段代码:


window.open("http://www.wrox.com/", topFrame");

->


window.open("http://www.wrox.com/", "topFrame");

P169,正文第三段第四行:
“……,那么这个两……”
改为:
“……,那么这两个……”

P179,正文倒数第二段第一句:
“……document.getElementsById()……” -> “……document.getElementById()……”

P191,代码第一段阴影部分:


engine.ver = browser.ver = RegExp["$1"];
engine.ie = browser.ie = parseFloat(engine.ver);

改为:


engine.ver = RegExp["$1"];
engine.ie = parseFloat(engine.ver);

P204,正文第一行:
“DOM(档对象模型)……” -> “DOM(文档对象模型)……”

P217,正文第一行:
“……字符串”</scr>” + “ipt>”……” -> “……字符串”</scr” + “ipt>”……”

P218,正文第一段第二行:
“……;而在XML(包括XHTML)中,……” -> “……;而在XML(有时候也包括XHTML)中,……”

* 此处原书有错误。

P221,正文(阴影框中)倒数第一行:
“尽管IE8已经解决了这些问题,但我们仍然不建议通过属性来设置特性。”
->
“尽管到了IE8才解决这些问题,但我们还是推荐通过属性来设置特性。”
P224,正文倒数第一行:
“nodeTpye” -> “nodeType”

P224,正文第六行(列表第三项)中:
“<buttou>” -> “<button>”
P224,正文倒数第一行:
“nodeTpye” -> “nodeType”

P233,正文倒数第二段,第一句:
“结果” -> “result”

P237,代码倒数第一段,第一行:


... onclick=\"alert('hi")\"....

->


... onclick=\"alert('hi')\"....

P245,代码第二段,加阴影的那一行:


for (var i=0 len=divs.length; i < len; i++){

->


for (var i=0, len=divs.length; i < len; i++){

P249,正文第12行:


……,其 nodeName 等于 prefix+" : "+ ocalName。

->


……,其 nodeName 等于 prefix+" : "+ localName。

P256,正文第二段最后一句:
“以下代码既输出CSS属性值,也输入值的类型”
->
“以下代码既输出CSS属性值,也输出值的类型”

P286,代码第三段,倒数第2行:


< /script >

->


</script>

P294,表格后第一段文字,第二行中的:
event.srtElement
->
event.srcElement

P300, “4.相关元素”下第一行:
“mouserout” -> “mouseout”

P315, 中间代码段中所有的斜双引号,改为直双引号:

P326,正文第二个列表第三项:
“changeTouches” -> “changedTouches”

P344,正文第二行括号中:
“<inpu>元素” -> “<input>元素”
P344,正文第三行开头:
“<textarea/>” -> “</textarea>元素”

P355,代码,第二段:


selectbox.remove(0);

改为:


selectbox.remove(i);

P378, 代码第二段,加阴影的那一行:


if (typeof.values.sort == "function"){

->


if (typeof values.sort == "function"){

P379, 代码第二段,第三行(问号后面的查询字符串中多了两个空格):


"http://www.someotherdomain.com?a=b &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; c=d");

->


"http://www.someotherdomain.com/?a=b&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;c=d");

P387,正文第一行:
“由于不能在COM对象……” -> “由于不能在DOM对象……”
P387,正文第二段(14.5.4第一段),倒数第一句:
“<span>” -> “<p>”

代码第一行:


span.innerHTML = "<div>Hi</div>"    //这里,span包含了<div>元素

->


p.innerHTML = "<div>Hi</div>"    //这里,p包含了<div>元素

P448,代码第二段,第二行(条件赋值部分的第二个值多了两个空格):


url += (url.indexOf("?") == -1 ? "?" : " &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; ");

->


url += (url.indexOf("?") == -1 ? "?" : "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;");

P466,正文,第三段,第三行:
“……被返回的数组的第一个元素应该是第二个参数” -> “……被返回的数组包含从第二个参数开始的所有参数”

P467,18.2第一段,第三行:
“……某个执行时间” -> “……某个时间执行”

P468,正文,第四段,第一行:
“事件处理器设置了一个250ms中调用的定事器” -> “事件处理程序设置了一个250ms后调用的定时器”

P469,代码,第一行:
//单调用 -> //早调用

P470,中间阴影框的第二行:
“跨浏览器” -> “跨窗口”

P472,第五段(三级标题18.2.3上面一段):
“……200ms以上的事件……” -> “……200ms以上的时间……”

P510,代码倒数第二行(加阴影的那一行):


for (var i=values.length; i >= 0; i--) {

->


for (var i=values.length-1; i >= 0; i--) {

P511,代码第二段:


var i = values.length;
do {
    process(values[i]);
} while (i-- >= 0);

->


var i = values.length-1;
do {
    process(values[i--]);
} while (i >= 0); 
P511,代码倒数第二段,第二行:


var iterations = Math.ceil(values.length / 8);

->


var iterations = Math.floor(values.length / 8);
P511, 正文倒数第二行:
“然后根据取整的上限函数……” -> “然后根据取整的下限函数……”

P527,代码,第一段:


Var classNames = div.className.split(/\s+/);

//找到要删除的类名
varpos = -1;
for (vari=0,len = className.length;i<len;i++){
      if(classNames[i] == "user"){
            pos=i;
            break;
      }
}

//删除类名
classNames.splice(i,1);

->


var classNames = div.className.split(/\s+/);

//找到要删除的类名
var pos = -1;
for (var i = 0, len = classNames.length; i<len; i++){
      if(classNames[i] == "user"){
            pos = i;
            break;
      }
}

//删除类名
classNames.splice(pos,1);

P532,代码,第一段,第二行(value属性前应该有一个空格):


<input type="button"value="Play" id="video-btn" />

->


<input type="button" value="Play" id="video-btn" />

P533,代码,第一段:
If ->if
Var -> var

P542,代码,倒数第一段,第五行(var与row之间应该有一个空格):


varrow=results.rows.item(i);

->


var row = results.rows.item(i);

P544,第二个有序列表,:
删掉事件名前面的句点。

P549,代码,第三段,第六行:


set ame(value){

->


set name(value){

P551,代码,第一段,第三行(R应为小写的r):


Return (item > 2);

->


return (item > 2);

P554,代码,第一段,第三、四行:


for (var i=0; I < 10; i++){
    Yield I * 2;
}

->


for (var i=0; i < 10; i++){
    yield i * 2;
}

正文第二段,第一句:
“my Numbers” -> “myNumbers”

P554,代码,倒数第一段,第八行(let与value间应有一个空格):


letvalue=iterator.next();

->


let value = iterator.next();

P557,代码,第二段,第一行:


var {age:personage} = person;

->


var {age:personAge} = person;

P560,正文,倒数第一行(typeof与null之间应该有一个空格):
“如typeofnull……” -> “如typeof null”

P568,代码,倒数第一段,倒数第一行(最后少了一个括号):


alert(person.getPersonType();

->


alert(person.getPersonType());

P569,22.1.11节,正文第二段,倒数第一行:
“oisMyClass” -> “o is MyClass”
“oisEventTarget” -> “o is EventTarget”

P570,正文第一段,倒数第一行:
“meisPerson” -> “me is Person”
“meisEmployee” -> “me is Employee”

P571,正文倒数第一段,第三行开头(I应该为小写的i):
“Iterator命名空间……” -> “iterator命名空间……”

P577,代码,第二段(页面中部的代码),最后一行:


alert(mapg.et("statusbar"));

->


alert(map.get("statusbar"));

特别鸣谢以下热心朋友提供勘误。

  • @Hiro(21)
  • @凌空一叶(17)
  • @Daild(6)
  • @余秉烨(5)
  • @sunnylost(4)
  • @dishuostec(3)
  • @air(3)
  • @裕波(2)
  • @gengv(2)
  • @jlulamplamp(2)
  • @snowqiang(2)
  • @Franko(1)
  • @千年一梦(1)
  • @yuhu(1)
  • @lpbottle(1)
  • @lenter(1)
  • @孙博(1)
  • @东方龙马(指出本勘误中的错误)
  • @Alpha tang(指出本勘误中的错误)

朋友们的留言

  1. dismory | 08月 10th, 2010 at 12:57

    P89的两个错误, 怎么勘误左右都一样?

    Reply to this comment
  2. dismory | 08月 10th, 2010 at 12:59

    哦 空格和注释的区别…

    Reply to this comment
  3. dismory | 08月 10th, 2010 at 13:04

    P126,图6-3,第二个子图的标题:“重写原型对象之后”->“重写原型对象之前”。

    上下两个子图的标题都是”重写原型对象之前”, 何解?

    Reply to this comment
  4. 为之漫笔 | 08月 10th, 2010 at 13:31

    @dismory 多谢提醒,现在应该清楚一些了。

    Reply to this comment
  5. Hiro | 08月 10th, 2010 at 23:21

    记得发现三个的,结果今天回头找就记起来了两个:

    p136 :
    第二行:instance1.colors.push(“black”); //”red,blue,green,black”
    后面的//”red,blue,green,black” 应放在下一行 alert(instance1.colors);的后面

    p154 :
    alert(person1.getName()); //”Michael”
    此处person1应为person

    Reply to this comment
  6. Hiro | 08月 10th, 2010 at 23:29

    对照上面给出的勘误,发现了p105的那个问题我也发现了,呵呵。

    Reply to this comment
  7. 为之漫笔 | 08月 10th, 2010 at 23:29

    @Hiro 这么快!

    Reply to this comment
  8. Hiro | 08月 10th, 2010 at 23:34

    没看文章就发表勘误,原来三个问题都被发现了,汗,好强悍的读者们啊!

    Reply to this comment
  9. 为之漫笔 | 08月 10th, 2010 at 23:39

    @Hiro P136、P154那两个勘误是我根据你的勘误刚刚放上去的 :)

    Reply to this comment
  10. guilipan | 08月 11th, 2010 at 16:02

    Nichols C.Zakas今年3月又出了一本《High Performance Javascript》,不知道李老师会翻译这本么?

    Reply to this comment
  11. 为之漫笔 | 08月 11th, 2010 at 17:28

    @guilipan 你说的这本书大概已经名花有主了。

    Reply to this comment
  12. Moon | 08月 12th, 2010 at 11:31

    P22页的矩形框中的有关undefined部分的论述让人不知所云,前后矛盾啊

    Reply to this comment
  13. 为之漫笔 | 08月 12th, 2010 at 11:54

    @Moon 哪里矛盾呢?或许是那段文字不太好理解吧。

    我试着解释一下这段话的意思,看能不能帮你理解:P21到P22的代码示例表明,对未初始化的变量(也就是声明了但还没有赋值的变量,即例中的message)和未声明的变量(即例中的var)使用typeof操作符都会返回”undefined”。显然,如果养成了只声明变量而不给变量赋值的编码习惯,那将来在复杂一些的代码中再遇到typeof返回”undefined”的情况,就不容易区分被检测的变量到底是未初始化的,还是根本就没有声明过的了。

    基于以上理解,这个提示框对读者给出了建议:“即便未初始化的变量会自动被赋予”undefined”值,但显式地初始化变量依然是明智的选择。如果能够做到这一点,那么当typeof操作符返回undefined值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。”

    如果经过我的解释你才理解了这段话,那说明这个提示框中的译文确实有问题,我现在把它修改成这样:“即便未初始化的变量会自动被赋予”undefined”值,但我们仍然建议读者养成显式初始化变量(即在声明变量的同时给变量赋值)的习惯。如果能够做到这一点,那么当typeof操作符返回undefined值时,我们就知道被检测的变量是还没有被声明的,而不是尚未初始化的了。

    你觉得怎么样?

    Reply to this comment
  14. Franko | 08月 19th, 2010 at 11:17

    P141 第一段代码的第二行var = prototype = object(superType.prototype); -> var = prototype = Object(superType.prototype); object – > Object

    Reply to this comment
  15. 为之漫笔 | 08月 19th, 2010 at 13:25

    @Franko

    为什么要把object改成Object?这好像不是错误啊,object是P138定义的函数。

    Reply to this comment
  16. Daild | 08月 23rd, 2010 at 16:14

    P163页,window.open(“http://www.wrox.com/”,topFrame¡”);topFrame少左引号

    Reply to this comment
  17. Daild | 08月 23rd, 2010 at 18:30

    P179,IE5.0之前的版本不支持document.getElementsById()这个方法,多了个s,–>document.getElementById();

    Reply to this comment
  18. Daild | 08月 24th, 2010 at 11:57

    P224,第六行,动态创建的type特性值为”reset”的元素重设不了表单,中间的buttou–> button

    Reply to this comment
  19. Daild | 08月 24th, 2010 at 12:01

    p224,最后一行的nodeTpye–>nodeType

    Reply to this comment
  20. Daild | 08月 25th, 2010 at 10:29

    P378,第17行的
    if(typeof.values.sort == “function”) typeof后面多个“.”

    Reply to this comment
  21. Hiro | 08月 25th, 2010 at 23:36

    那个p245的错误,应该是“,”号吧,若是分号,则len就为全局变量了!!

    Reply to this comment
  22. air | 08月 26th, 2010 at 19:06

    261页的offsetLeft解释
    “元素的左外边框至包含元素的左内边框之间的像素距离”
    应该是左外吧,左内的话,那包含元素的边框就不计算在内了,
    我测试过和网上找了一些介绍,例如”offsetLeft:获取当前对象到其上级层左边的距离.”

    Reply to this comment
  23. 为之漫笔 | 08月 26th, 2010 at 23:11

    @air 应该没错。“包含元素”是指包含当前元素的元素,见图11-1。另外,该页倒数第一段第一句“……,包含元素的引用保存在offsetParent属性中”说明了“包含元素”的含义,即包含元素是当前元素的直接上级(parent)元素。

    Reply to this comment
  24. Moon | 08月 29th, 2010 at 16:05

    问个问题:
    Object.constructor 与 Object.prototype.constructor 的区别是什么?

    Reply to this comment
  25. MingsenLiu | 08月 31st, 2010 at 16:44

    回Moon

    我的理解是:

    Object.constructor //引用对象的constructor方法

    Object.prototype.constructor //为constructor设置新的方法

    Reply to this comment
  26. MingsenLiu | 08月 31st, 2010 at 16:45

    错了,是为Object

    Object.prototype.constructor //为Object设置新的方法

    Reply to this comment
  27. air | 09月 3rd, 2010 at 02:56

    344页第二行 类似于元素的…. 缺了个t
    另外问一下,近期有没有翻译哪本大作的计划呢?
    象9月的JavaScript Bible, 7th Edition,年底的js权威指南第六版,DOM Scripting第二版等.

    Reply to this comment
  28. air | 09月 6th, 2010 at 15:40

    387页第一行,”由于不能在COM对象被销毁之后”

    应该是DOM,原书也错了

    Reply to this comment
  29. air | 09月 6th, 2010 at 15:59

    另外14.5.4
    span.innerHTML
    原文是p.innerHTML,

    其实表达的意思是一致,
    不过p元素虽然不是行内元素,但是从语义上(也就是原文的技术上)来说,p也是不可以包含块元素的.
    各标记包含关系http://dl.javaeye.com/upload/attachment/80840/a231f8fd-cb89-38f1-be48-d8d2aa62ee51.gif

    Reply to this comment
  30. air | 09月 8th, 2010 at 16:26

    先说声抱歉,由于没仔细读这章…
    P387,正文第一行:
    “由于不能在COM对象……” -> “由于不能在DOM对象……”
    这里根据前文,应该没问题,就是没找到相关介绍.希望尽快删除我的相关评论,以免误导,呵呵

    Reply to this comment
  31. 凌空一叶 | 09月 8th, 2010 at 22:45

    @air
    昨天看到松峰老师把这条勘误发出来,就觉得有点奇怪,不符以往的水准哈,估计是太忙了,没时间细看上下文。此处“勘误”所在小节前面不是说IE里的DOM对象就是以COM对象形式存在,所以后面说DOM或者COM都可以。

    Reply to this comment
  32. 凌空一叶 | 09月 9th, 2010 at 01:05

    今天晚上读了华章出的那本标榜为“设计模式领域的又一里程碑之作”的《设计模式之禅》,中国人写的书,还一大堆严重错误,引用几句英文原文定义,“o1 is substituted for o2”居然给翻译成“o1代换成o2”,又白纸黑字的印着“覆盖或实现父类的方法时输入参数可以被放大”这样的话,彻底对华章绝望了。华章的书错误一大推,几乎没有一本书发过勘误,不知道是怕影响销量还是啥,害得每个读者花了书钱,还要给这本书当责任编辑。华章当自己比新三国的曹操还牛,人家“知错改错不认错”,至少还有一条是好的。

    前几天在豆瓣上看到博主写的《翻译二、三事》(http://www.douban.com/online/10363569/discussion/22714923/),你提到的“某出版社听说我辞职了”,我大概也猜到是谁了。看到这里《JavaScript高级程序设计(第2版)》勘误发到30多条,不得不佩服译者和图灵的胸怀和勇气。毕竟错误是难免的,即便是大名鼎鼎的MIT出版社,其《算法导论》第二版原版印刷10余次了,发布的勘误达上百条(包括50多个严重错误,100多个微小错误),作者甚至还专门为此设计了一个勘误的排序程序,按印次、勘误位置、严重性、提供者显示错误,方便大家查找。(http://www.cs.dartmouth.edu/~thc/clrs-2e-bugs/bugs.php),读者也并未因为勘误多而放弃这样的好书。希望图灵网站以后也能出现这样贴心的勘误程序。

    Reply to this comment
  33. 为之漫笔 | 09月 9th, 2010 at 12:20

    @air @凌空一叶

    COM改DOM一处,我在确认发表勘误之前查过原文。根据上下文,那句话中的COM和DOM确实是一个意思,不改似乎也没问题。但毕竟读者(@air)感觉在中文语境下说“COM对象被销毁之后……”有问题,而作为译者应该始终把读者的意见放在第一位,在这种可改可不改的情况下,读者的意见大于译者的想法。况且,改起来也容易,呵呵。所以,就改了。

    同样,读者@Moon也指出了P22页的一句话不好理解。我仔细看了一下,那句话虽然没有翻译错,但确实拘泥于原文字面了,读一遍都理解不了。既然不好理解,就是问题。所以,也改了。

    上周,本书第二次印刷的工作单下来了,上述36处勘误都已经提交,将在第二次印刷的版本中得到修正。如果大家觉得COM改DOM不妥,可以在第三次印刷时再改过来。

    Reply to this comment
  34. 为之漫笔 | 09月 9th, 2010 at 12:45

    @凌空一叶

    翻译的书里面有错,理当认真改正,更何况这本书得到了那么多朋友的关注呢。说到胸怀和勇气,实在谬奖了,愧不敢当啊!

    《算法导论》原版发表勘误的方法确实值得学习。今天,我们审稿时还说起图灵有两本经典书明年要有新版了,出新版的时候还要再仔细看一看,争取做到尽善尽美一点呢。这本书的勘误也给了我们砥砺了。

    对了,你找bug得的积分足够一本书了,想要什么书,只管说。

    Reply to this comment
  35. 凌空一叶 | 09月 9th, 2010 at 18:52

    『而作为译者应该始终把读者的意见放在第一位,在这种可改可不改的情况下,读者的意见大于译者的想法。况且,改起来也容易,呵呵。所以,就改了。』

    记得侯捷博客也曾谈及他对勘误的坚持以及出版社对此的一些考量。松峰老师说“改起来也容易”,其实从侯捷博客才知道,当时改一处错误,这个页码连带的几十页所在的印张都要重新制版(不知道现在还是不是这种情况),并不是所有出版社都愿意出这笔费用的,有时亦不得不做一点妥协,放弃每次印刷都更新勘误,而先在网络上发布勘误累计到一定程度再去重新制版,台湾的网络比内地普及得早,这种方式在也是多方可以接收的。侯捷和内地的潘爱民的书有个奇怪的现象,国内不少读者宁可买他们译的老版本,也不愿意接其他译者的新版,这恐怕就是译者的口碑和魅力吧!

    至于找bug的积分,今年图灵出的一本新书《深入浅出Ext JS(第2版)》比较感兴趣,现在OA用这个JS框架的也比较多。如果方便,还请松峰老师惠赐签名。

    Reply to this comment
  36. 为之漫笔 | 09月 9th, 2010 at 22:36

    @凌空一叶

    > 这个页码连带的几十页所在的印张都要重新制版

    我猜想这可能是因为某一页的修改造成了页码变动,结果至少一章后面几十页的页码都要跟着变。不过,这种情况说的应该是铅字排版时代。

    > 不知道现在还是不是这种情况

    现在早已经都是激光照排了,即使修改造成了页码变动,也不会影响那么多页。排版人员可以调整字距、行距、段距,把需要变动的页面量控制在最少。

    > 并不是所有出版社都愿意出这笔费用的

    如今,重新出片和印制花费很少,理论上应该没有哪家出版社会为省这点小钱而不想给重印书做勘误;放到网上“下不来”的勘误多半都是因为书卖得不好,没有机会重印了。现在各家出版社做勘误真正难在没有读者反馈勘误,到了重印的时候“无米下锅”。这本书能及时收到这么多朋友反馈的勘误,确实是很难得的。

    > 还请松峰老师惠赐签名

    没问题。把你的一些简单介绍发给我吧(姓名、单位、职位、技术专长、兴趣领域、手机、地址、邮编),以便放到赠书数据库里申请赠书。

    Reply to this comment
  37. 凌空一叶 | 09月 10th, 2010 at 10:39

    感谢松峰老师!简要资料已发至[email protected]

    Reply to this comment
  38. 凌空一叶 | 09月 12th, 2010 at 20:32

    下午收到debug活动 松峰老师的签名赠书,非常兴奋!说来参加这个活动,也是自己数学专业养成的一种惯性,遇到问题,没有解决总不能释怀,虽不至夜不能寐,却也同郭靖学降龙十八掌一样无暇旁顾,即便是黄蓉的美食也食不甘味。可能这就是理科的人都有的“罩门”吧,太过执着而少了一分灵动。

    人邮有本书宣传文案写得很好:“像艺术家一样浪漫,像工程师一样严谨”,学习一些web前端知识,摆弄摆弄设计,也算是对自己性格的一种调和吧。 再次感谢松峰老师为我们带来的这本译作!

    Reply to this comment
  39. car123472 | 09月 14th, 2010 at 10:43

    想问问老师,在p155页的第一段代码中,singleton的定义是不是用私有作用域的方式啊?

    Reply to this comment
  40. 为之漫笔 | 09月 14th, 2010 at 20:40

    @car123472

    第一段代码定义并立即执行了一个匿名函数,该函数返回的singleton对象的方法可以访问它自己的(封闭在该匿名函数中的)私有变量和私有函数。

    Reply to this comment
  41. hiro | 09月 27th, 2010 at 11:57

    发现一错:
    p256 正文第二段最后一句:
    “以下代码既输出CSS属性值,也输入值的类型”
    ===》
    “以下代码既输出CSS属性值,也输出值的类型”

    你确认下吧!!

    Reply to this comment
  42. 千年一梦 | 10月 15th, 2010 at 17:04

    P469,倒数第4行,“结果在5ms处添加的…”,似乎应该是“结果在205ms处添加的…”。

    P470,中间阴影框的第二行,“跨浏览器”应为“跨窗口”。

    Reply to this comment
  43. snowqiang | 11月 15th, 2010 at 16:03

    P140 :怀疑原书的问题,
    SubType.prototype = new SuperType()的过程配图,上半部分 SubType 是否应为 SuperType ?

    Reply to this comment
  44. 为之漫笔 | 11月 15th, 2010 at 17:08

    @snowqiang

    确实是一处错误,多谢指出。

    Reply to this comment
  45. snowqiang | 11月 15th, 2010 at 18:29

    P152: 7.4私有变量

    // 函数的私有变量 -> // 私有变量和函数

    Reply to this comment
  46. 凌空一叶 | 11月 15th, 2010 at 22:06

    好久没在松峰老师博客留言了,刚路过,看见以前留言讨论过的P119,“原型属性”或“prototype属性”的问题,给发出来了,建议把中文版P133页第一段中类似的问题也修改下。中文书原文我用修正液涂了,只好给出英文的原文

    So instance points to SubType.prototype, and
    SubType.prototype points to SuperType.prototype

    改为
    So instance points to SubType Prototype, and
    SubType Prototype points to SuperType Prototype
    这样比较明确点,可能这页的译者注也要修改下

    Reply to this comment
  47. hiro | 11月 16th, 2010 at 19:49

    好久没看这本书了,昨晚翻了几页,又发现个错误:
    P294,表格后第一段文字,第二行,event.srtElement改为event.srcElement

    Reply to this comment
  48. 余秉烨 | 11月 16th, 2010 at 21:34

    p161页,倒数第三段的倒数第二行“在Firefox和Safari中,screenTop……”中的screenTop应该为screenY。

    Reply to this comment
  49. hiro | 11月 18th, 2010 at 08:59

    315页,中间那段代码的所有双引号都用错了!

    Reply to this comment
  50. 为之漫笔 | 11月 18th, 2010 at 17:16

    感谢这几天提供勘误的朋友,勘误表已经更新了!

    PS:这几天外出审稿,所以没有及时回复和更新。

    Reply to this comment

我来说两句儿

可以在留言中使用以下标签 :<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Spam Protection by WP-SpamFree