现代 JavaScript 开发编程风格Idiomatic.js指南中文版(3)

return {
      // 这是一个布尔值
      bool: true,
      // 一个字符串
      string: "a string",
      // 一个数组
      array: [ 1, 2, 3, 4 ],
      // 一个对象
      object: {
        lang: "en-Us"
      },
      getData: function() {
        // 得到 `data` 的值
        return data;
      },
      setData: function( value ) {
        // 返回赋值过的 `data` 的值
        return ( data = value );
      }
    };
  })();

// 其他一些将会出现在这里

// 把你的模块变成全局对象
  global.Module = Module;

})( this );

// 5.2.1
// 一个实用的构建函数

(function( global ) {

function Ctor( foo ) {

this.foo = foo;

return this;
  }

Ctor.prototype.getFoo = function() {
    return this.foo;
  };

Ctor.prototype.setFoo = function( val ) {
    return ( this.foo = val );
  };

// 不使用 `new` 来调用构建函数,你可能会这样做:
  var ctor = function( foo ) {
    return new Ctor( foo );
  };

// 把我们的构建函数变成全局对象
  global.ctor = ctor;

})( this );

六、命名

A. 你并不是一个人肉 编译器/压缩器,所以尝试去变身为其一。

下面的代码是一个极糟命名的典范:

复制代码 代码如下:


// 6.A.1.1
// 糟糕命名的示例代码

function q(s) {
  return document.querySelectorAll(s);
}
var i,a=[],els=q("#foo");
for(i=0;i<els.length;i++){a.push(els[i]);}


毫无疑问,你写过这样的代码 —— 希望从今天它不再出现。

这里有一份相同逻辑的代码,但拥有更健壮、贴切的命名(和一个可读的结构):

复制代码 代码如下:


// 6.A.2.1
// 改善过命名的示例代码

function query( selector ) {
  return document.querySelectorAll( selector );
}

var idx = 0,
  elements = [],
  matches = query("#foo"),
  length = matches.length;

for ( ; idx < length; idx++ ) {
  elements.push( matches[ idx ] );
}


一些额外的命名提示:

复制代码 代码如下:


// 6.A.3.1
// 命名字符串

`dog` 是一个 string

// 6.A.3.2
// 命名 arrays

`['dogs']` 是一个包含 `dog 字符串的 array

// 6.A.3.3
// 命名函数、对象、实例,等

camlCase; function 和 var 声明

// 6.A.3.4
// 命名构建器、原型,等

PascalCase; 构建函数

// 6.A.3.5
// 命名正则表达式

rDesc = //;

// 6.A.3.6
// 来自 Google Closure Library Style Guide

functionNamesLikeThis;
variableNamesLikeThis;
ConstructorNamesLikeThis;
EnumNamesLikeThis;
methodNamesLikeThis;
SYMBOLIC_CONSTANTS_LIKE_THIS;


B. 面对 this

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgpfwy.html