在阅读 yeoman 生成器文档(http://yeoman.io/generators.html#writing-your-first-generator)时,我遇到了以下行。
从顶部开始,您放置在 BlogGenerator.prototype 上的每个方法都将按照您编写它们的顺序被调用。
yeoman 如何以相同的顺序执行方法?
在阅读 yeoman 生成器文档(http://yeoman.io/generators.html#writing-your-first-generator)时,我遇到了以下行。
从顶部开始,您放置在 BlogGenerator.prototype 上的每个方法都将按照您编写它们的顺序被调用。
yeoman 如何以相同的顺序执行方法?
其实,这很容易...
var methods = Object.keys(Object.getPrototypeOf(this));
这是Github 链接。是的,它们被调用,而不是被评估:
/*
* 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 正在尊重属性的插入顺序 - 否则给出的代码显然不会按预期运行。