Javascript for in의 결함 요약
for in 문은 다음과 같이 객체의 속성(구성원)을 나열하는 데 사용됩니다.
var obj = { name:"jack", getName:function(){return this.name} }; //输出name,getName for(var atr in obj) { alert(atr); }
당신은 obj가 toString 및 valueOf와 같은 내장 속성(또는 내장 멤버, 숨겨진 속성 및 사전 정의된 속성)이 출력되지 않는다는 점을 확인하세요. 즉, for in은 개체의 표시된 멤버(사용자 지정 멤버)를 나열하는 데 사용됩니다.
내장 속성을 재정의하면 obj의 toString
var obj = {name:"jack", getName:function(){return this.name}, toString:function(){return "I'm jack."} } for(var atr in obj) { alert(atr); }
를 다시 작성해 보겠습니다.
1. IE6/7/8에서는 String을 다시 작성하지 않는 것과 동일하며 여전히 출력 이름인 getName
2. Opera/Safari 다음 출력 name, getName, toString
내장 프로토타입에 속성/메서드를 추가하면
Object.prototype.clone = function() {} var obj = { name: 'jack', age: 33 } // name, age, clone for (var n in obj) { alert(n) }
if (!Function.prototype.bind) { Function.prototype.bind = function(scope) { var fn = this return function () { fn.apply(scope, arguments) } } } function greet(name) { alert(this.greet + ', ' + name) } for (var n in greet) { alert(n) }