PDA

Просмотр полной версии : Определение неперечисляемых полей/методов


Martoon
02.09.2015, 22:25
Вот есть объект

var nyanCat = {
produceNyan: function(){
trace("nyan")
},
__resolve: function(name: String){
return this[name] = "nyan_" + name
}
}


Хочется уметь делать так, что

for (var i in nyanCat)
trace(i)

ничего не выводит. Или хотя бы не выводит __resolve, который ранее не перечислялся. Возможно ли это?

Просто возможность переопределить/добавить пару методов в Object или MovieClip кажется очень заманчивой. Но, раз это "поломает" for..in у всех их наследников, уже как-то и не хочется

samana
02.09.2015, 23:26
Просто возможность переопределить/добавить пару методов в Object или MovieClip кажется очень заманчивой.
По-идее можно ведь создать унаследованные классы и в них переопределить нужные методы.
А чтобы переопределить методы для мувика глобально (без создания подклассов), то в as2 было что-то связано с prototype, но я забыл совсем...

Martoon
02.09.2015, 23:50
Вопрос не в том как глобально переопределить, это понятно.

Object.prototype.nyan = function(){ ... }

Вопрос в том, можно ли сделать это таким образом, чтобы в for..in этот метод не появлялся (и желательно нативно).

Про унаследованные классы - тоже не совсем по сути вопроса. for..in по объекту такого класса-наследника пройдётся по новому методу

dark256
03.09.2015, 09:20
Надо снять с объекта запрещение на перечисление его свойств циклом for-in.

for ( var i in _global ) trace( i )
trace("■")

ASSetPropFlags( _global, null, null, 1)

for ( var i in _global ) trace( i+" = "+_global[i] )
trace("■")

Martoon
03.09.2015, 11:08
То что нужно, спасибо )