网络编程
位置:首页>> 网络编程>> JavaScript>> 如何编写高质量的Javascript代码(6)

如何编写高质量的Javascript代码(6)

 来源:rockux 发布时间:2011-03-07 16:04:00 

标签:javascript,代码,经验

另外一种使用方法如下:




for (var i in man) {
   if (Object.prototype.hasOwnProperty.call(man, i)) { // filter
      console.log(i, ":", man[i]);
   }
}

这样写的好处是可以防止man重新定义了hasOwnProperty方法导致的冲突。如果不想写这么长的一串,你也可以这样:




var i, hasOwn = Object.prototype.hasOwnProperty;
for (i in man) {
    if (hasOwn.call(man, i)) { // filter
        console.log(i, ":", man[i]);
    }
}

严格意义上讲,不适用hasOwnProperty也不是什么错误。根据任务的难度和你对代码的自信程度,你也可以不用这个直接循环。但是当你不确定的时候,最好还是使用这个方法检测一下。

另外一种格式上的改变(不会通过jsLint的检查),去掉for的大括号,然后把if放在同一行。这样做的好处可以让循环体更加突出,缩进也就少一些:




// Warning: doesn't pass JSLint
var i, hasOwn = Object.prototype.hasOwnProperty;
for (i in man) if (hasOwn.call(man, i)) { // filter
    console.log(i, ":", man[i]);
}

不要扩展内建的原型

扩展原型的构造函数,可以提供一些很强大的功能,但是有时候他太强大了。

有时候你会去扩展Object(),Array(),Fucntion()的原型方法,这样会导致可维护性的问题,因为这会让你的代码的移植性变差。其他的开发人员使用你的代码的时候,可能只需要原生的方法,并不需要额外的功能。

另外,你添加进去的方法,如果在循环的时候没有使用hasOwnProperty方法就会被遍历出来,这会让人很迷惑。

所以,最好还是不要扩展基本的对象。除非是下面的情况:

你确定在将来根据ECMAScript规范,浏览器会添加相应的原型方法,那么是可以的,你只不过是提前实现了这个功能。

你确定的你要实现的方法不存在–或许有时候在代码的其他的地方实现了,或者有的浏览器支持,这都是不行的。

有非常清晰的文档,并且与团队成员沟通过

如果在这些情况之下,那么你就可以添加,最好是下面这种形式:

if (typeof Object.prototype.myMethod !== "function") {
   Object.prototype.myMethod = function () {
      // implementation...
   };
}

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com