Использование 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 просто недопустимо. Это серьезный косяк.  | 
	
		
 Цитата: 
	
  | 
	
		
 skrudjmakdak, 
	Имеется в виду что в прототипе могут лежать тысячи свойств и при этом не обязательно иметь цепоочку в 1000 наследований. Достаточно 2 наследования по 500 свойств. Вообще есть метод Object.getOwnPropertyNames, если забить на старые браузеры. Если совсем заморачиваться можно сделать чтобы каждый объект хранил в себе массив своих ключей, но проще не использовать for in там где нужна скорость.  | 
	
		
 tsigel, 
	Достаточно делать if(!(this.hasOwnProperty(i))) break вместо if(this.hasOwnProperty(i)){... И все будет норм. Я об этом  | 
	
		
 terminator-101, 
	Возможны косяки в старых браузерах, хотя не проверял.  | 
	
		
 Цитата: 
	
 terminator-101, а почему ты игнорируешь свойства из прототипа?  | 
	
		
 Цитата: 
	
  | 
	
		
 terminator-101, а что говорит ECMA спецификация о порядке обхода свойств? 
	 | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Есть такое дело, break и continue неведомы многим, а некоторыми даже порицаются, я уж не говорю о таком кощунстве как return из тела цикла, как из тела кусок вырываешь понимаешь. 
	 | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Насколько я вижу этот сайт целиком на js работает и вроде не тормозит. Может мало форичей, то есть форинов?  | 
	
		
 Цитата: 
	
 
arr=[1, 2, 3, 4, 5]
throw_=function(wanted, x){if(x===wanted) throw x}
return_=function(wanted, x){if(x===wanted) return x}
main=function(wanted, f, comment){
try{
arr.forEach(function(x){console.log(comment+": "+x); f(wanted, x)})
}catch(ret){return ret}
}
console.log("from throw_ call: "+main(3, throw_, "throw"))
console.log("from return_ call: "+main(3, return_, "return"))
 | 
	
		
 ECMAScript говорит 
	Цитата: 
	
  | 
| Часовой пояс GMT +3, время: 12:30. |