Javascript方法执行顺序

时间:2013-10-28 14:35:03

标签: javascript yeoman

在阅读yeoman发电机文档(http://yeoman.io/generators.html#writing-your-first-generator)时,我遇到了以下问题。

从顶部开始,您在BlogGenerator.prototype上放置的每个方法都将按照您编写的顺序进行调用。

yeoman如何以相同的顺序执行方法?

1 个答案:

答案 0 :(得分:3)

实际上,它就像......一样简单。

var methods = Object.keys(Object.getPrototypeOf(this));

这是Github link。是的,它们被调用,而不是被评估:

/*
 * Runs the generator, executing top-level methods in the order they
 * were defined.
 */
// ...
async.series(methods.map(resolve), runHooks); 

从技术上讲,如果使用数字名称定义属性,可能会遇到麻烦。例如:

var Foo = function() {};
Foo.prototype.bar  = function() { console.log('I am bar'); };
Foo.prototype[123] = function() { console.log('I am 123'); };

var foo = new Foo(); 
var methods = Object.keys(Object.getPrototypeOf(foo)); // ['123', 'bar']
methods.map(function(fn) { foo[fn]() }); 
// I am 123
// I am bar

但我认为这些案件被认为是不存在的。对于所有其他人来说,看起来V8正在尊重属性的插入顺序 - 否则所给出的代码显然不会按预期运行。