我正在研究一些CreateJS样本,其中一个我见过这个,我想知道它的用途是什么
(function() {
var c = createjs;
var a = function(blabla) {
this.blabla = blabla;
var p = Game.prototype;
p.a;
p.b;
p.c;
p.d;
/*
... 15 variables like that ...
*/
p.init = function(param) {
/* blabla */
}
/*
...
long code after that
...
*/
})();
在github示例中,在/createjs/sandbox-master/PlanetaryGary
目录中,它是文件js/Game.js
答案 0 :(得分:5)
我是相关代码的原作者。这种模式归结为良好的代码是自我记录的简单哲学。
对于那些进入这个盲人的人来说,这些属性实际上并没有被命名为a,b,c等,值得一提。值得一提的是,他们通常会被分配一个默认值(虽然不是在这种特殊情况下)。
前面的变量声明明确定义了与"类"相关联的字段。这允许开发人员从上到下进行扫描,并在查看对其进行操作的方法之前建立该类操作的数据的心理模型。
虽然引用的代码没有记录,但它提供了一个方便的上下文链接文档注释。
/**
* Docs for firstName here.
**/
p.firstName = "default";
/**
* lastName docs.
**/
p.lastName = "default";
最后,我发现它鼓励采用更加深思熟虑的数据和文档方法。定义新属性的行为成为查看现有属性和评估新字段必要性的机会。我已经看到很多错误和糟糕的代码导致开发人员不断地将属性附加到类中。
当您在代码的专用区域明确定义新属性时,忘记记录新属性(并且更容易快速发现未记录的属性)也更加困难。
答案 1 :(得分:4)
在不了解某些Game
对象的字母数据成员的详细信息的情况下,以您展示的方式提及p.a
,p.b
等是一种很好的展示方式确切地说变量p
是如何构造的。
在您共享的代码段的控制流程中,我们可以在对其执行任何初始化或其他操作之前确切地看到变量p
具有哪些字段。
答案 2 :(得分:3)
对象p
可能会为其分配带有副作用的getter:
Object.defineProperty(p, 'a', { get: function() {
window.universalConstant = 42;
return p._a;
});
可能,但不太可能。正如@PaulD所暗示的那样,这可能是对文档的错误尝试。