function getNonEnumerableNonOwnPropertyNames( obj ) {
var oCurObjPrototype = Object.getPrototypeOf(obj);
var arReturn = [];
var arCurObjPropertyNames = [];
var arCurNonEnumerable = [];
while (oCurObjPrototype) {
arCurObjPropertyNames = Object.getOwnPropertyNames(oCurObjPrototype);
arCurNonEnumerable = arCurObjPropertyNames.filter(function(item, i, arr){
return !oCurObjPrototype.propertyIsEnumerable(item);
})
Array.prototype.push.apply(arReturn,arCurNonEnumerable);
oCurObjPrototype = Object.getPrototypeOf(oCurObjPrototype);
}
return arReturn;
}
Пример использования:
function MakeA(){
}
var a = new MakeA();
var arNonEnumerable = getNonEnumerableNonOwnPropertyNames(a);
Я предлагаю вам изучить планирование в го (хорошая статья из ardanlabs ).
Краткий ответ: вы не контролируете порядок выполнения, а Go Runtime делает. Каждое выполнение одной и той же программы не приведет к одному и тому же следу выполнения. Детектор гонки отслеживает «грубое» поведение при каждом запуске, и результаты напрямую зависят от решения планировщика.