도서 컬렉션을 관리하는 코드는 다음과 같습니다.
var Book = function(title,pages,priority){
this.title = title;
this.pages = pages;
this.priority = priority;
this.GetMaxmimumDays=function(){
var effortCalculator = new EffortCalculator(this.pages);
return effortCalculator.CalculateDays();
}
};
var BooksCollection = (function(){
var books=[];
return {
Add:function(book){
books.push(book);
},
Remove:function(title){
for(var i=0;i<books.length;i++){
if(books[i]["title"]==title){
books[i]["title"]=null;
}
}
},
Print:function(){
for(var i=0;i<books.length;i++){
var itemText="";
for(item in books[i]){
itemText=itemText+""+item+":"+books[i][item];
}
alert("item"+itemText); /** itemText prints the string includes the function definition. **/
}
},
Count:books.length,
SortByPriority:function(){
}
};
})();
위 코드에서 BooksCollection.Print ()는 컬렉션의 everyItem 및 everyProperty를 인쇄합니다. 그러나 책 인스턴스에는 함수 멤버가 있습니다. 동일한 내용이 경고로 인쇄됩니다.
출력에서 인쇄되는 함수를 숨기기 위해 아래와 같이 Print ()를 감쌌습니다.
Print:function(){
for(var i=0;i<books.length;i++){
var itemText="";
for(item in books[i]){
if(!(item instanceof Function)){
itemText=itemText+""+item+":"+books[i][item];
}
}
alert("item"+itemText);
}
}
하지만 상황은 여전히 부정적입니다. (typeof (item) === "Function") 시도했지만 typeof (item)은 여전히 "String"을 읽습니다.
typeof 및 instanceOf 키워드의 의심스러운 행위가 궁금합니다.
여기에서 바이올린을 찾을 수 있습니다. http://jsfiddle.net/saravanakumarrc/rDEnt/40/
해결책을 찾도록 도와주세요.
귀하의 경우에는 typeof item
항상 a-열거되는 string
속성의 키 Book
입니다.
테스트하려는 것은 해당 항목 의 값 이므로 다음을 원합니다 typeof books[i][item]
.
for(item in books[i]){
if(typeof books[i][item] != 'function'){
itemText=itemText+""+item+":"+books[i][item]+ '\r\n';
}
}
라이브 예 : http://jsfiddle.net/kDHfU/
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다