Показать сообщение отдельно
  #1 (permalink)  
Старый 22.10.2014, 04:12
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Использование for in
Считается, что for in медленный. Это действительно так, но я ща подумал, он сука, медленный не столько сам по себе, сколько из-за этого:

proto={a: 1, b: 2, c: 3, d: 4, e: 5}
ob=Object.create(proto)
ob.foo=10
ob.bar=20
ob.baz=30

monkeyFu=function(){
   for(var i in this){
      if(this.hasOwnProperty(i)){
          console.log("Monkey do stuff with "+ this[i])
      }
      console.log("Monkey usage: "+this[i])
   }
}

normalFu=function(){
   for(var i in this){
      if(!(this.hasOwnProperty(i))) break
      console.log("Right usage: "+this[i])
   }
}

monkeyFu.call(ob)
normalFu.call(ob)

//  Monkey do stuff with 10
//  Monkey usage: 10
//  Monkey do stuff with 20
//  Monkey usage: 20
//  Monkey do stuff with 30
//  Monkey usage: 30
//  Monkey usage: 1
//  Monkey usage: 2
//  Monkey usage: 3
//  Monkey usage: 4
//  Monkey usage: 5
//  Right usage: 10
//  Right usage: 20
//  Right usage: 30

Именно так его обычно пользуют. А цепочка прототипов может ведь состоять и из тыщи объектов. Соответственно, если нужны только свойства самого объекта, без прототипов, использование по типу monkeyFu просто недопустимо. Это серьезный косяк.

Последний раз редактировалось terminator-101, 22.10.2014 в 04:32.
Ответить с цитированием