2015-01-05 2 views
0

안녕하십니까. ^^
입력 만들기에 함수를 사용하고 싶지만 객체 (예 : 사용자 정의 입력 만들기)와 같이 변수 뒤에 변수 이름 (예 : "이름")을 지정하고 싶습니다. 그 후 (작성 및 확인) 첫 번째 HTML 코드에서 div "userInfo"에 입력을 삽입하고 두 번째 입력에서 값을 확인하려는 기능을 사용하고 싶습니다.전역 변수에서 객체 함수를 사용할 수없는 이유는 무엇입니까?

문제는 개체를 전역 변수 "name"에 연결 한 후 해당 함수를 사용하면 브라우저의 콘솔에서 name.create()가 함수가 아니므로 사용할 수 없습니다.

불쌍한 영어와
감사합니다 모두에 자바 스크립트의 xD 내 멍청한 놈 수준

function createAll() { 
 

 
    name = new textInput("nameInput", 8, 24, "a-Z0-9", "required"); 
 
    concatFirst += name.create(); 
 
    document.getElementById("userInfo").innerHTML = concatFirst; 
 
    console.log(JSON.stringify(name)); 
 
} 
 

 
function textInput(idInput, minlenght, maxlenght, req, requiredOption) { 
 

 
    this.idIn = idInput; 
 
    this.minLong = minlenght; 
 
    this.maxLong = maxlenght; 
 
    this.reqCha = req; 
 
    this.requiredOpt = requiredOption; 
 
    this.create = function() { 
 
    return "<p> \ 
 
      <input id='" + this.idIn + "' pattern='[" + this.reqCha + "]{" + this.minLong + ",}' maxlenght='" + this.maxLong + "' " + " onchange='name.check()' onmouseover='name.check()' " + this.requiredOpt + " ></input> \ 
 
      </p>"; 
 
    } 
 
    this.check = function() { 
 

 
    document.getElementById(this.idIn).style.boxShadow = "0 0 10px 3px green"; 
 
    } 
 
}
<html> 
 
    <body onload="createAll();"> 
 
    <div id="mainForm"> 
 
     <!-- First Form --> 
 
     <div id="userInfo"> 
 
     </div> 
 
    </div> 
 
    </body> 
 
</html>
를 ^^

+0

* "... 예 : 'name'"* - 다른 변수를 사용해 보셨습니까? 이름 'name'이 문제의 원인 일 수 있습니다. – GolezTrol

답변

2

글로벌 상징 "이름"는 window 개체의 고유 재산이며, 브라우저는 문자열 아무것도하지만 그것을 변경할 수 없습니다.

다른 이름 (예 : "naem")을 사용할 수 있으며 정상적으로 작동합니다. 물론 window 개체의 다른 내장 개체로 이미 사용중인 이름을 선택할 위험이 있습니다. 이 모든 상황은 JavaScript 클라이언트 코드의 전역 변수가 왜 바람직하지 않은지에 대한 좋은 객체 레슨입니다. 환경은 충돌 한 잠재적 충돌의 지뢰밭입니다.

+0

코드를 수정하는 방법을 보여 주면 내가 당신을 upvote거야. – Barmar

+0

아니면'var name'을 사용하여 로컬 변수로 만들 수 있습니다. – Barmar

+0

@Barmar 그의 "onfoo"속성은 전역 심볼로 의존합니다. 정말로 나는 모든 것이 여러 가지 이유로 리팩토링 될 필요가 있다고 생각합니다. – Pointy

관련 문제