2016-11-01 5 views
1

자바 스크립트를 처음 사용했습니다. 인스턴스를 통해 함수에 값을 전달하는 방법은 무엇입니까?인스턴스를 통해 값을 전달하는 방법은 무엇입니까?

주 기능 (클래스)에 전달할 객체/인스턴스에 몇 가지 값이 있습니다.이 값 중 일부는 선택 사항이며, 전달되지 않으면 기본값이 사용됩니다. 여기

var test = new Test({ 
    buttonId: 'sb', 
    inputField: 'saveTextarea' 
}); 

(function() { 

var buttonId, inputField, requestFileName, fileName; 

buttonId = null; 
inputField = null; 
requestFileName = null; 
fileName = null; 

// constructor 
this.Test = function() { 

    // defaults 
    var defaults = { 
     buttonId: "", 
     inputField: "", 
     requestFileName: false, //if true, prompt for fileName 
     fileName: Math.random().toString(36).slice(2) 
    } 

    // extend defaults 
    if (arguments[0] && typeof arguments[0] === "object") { 
     this.options = extendDefaults(defaults, arguments[0]); 
    } 

} 



document.getElementById(buttonId).onclick = function() { 

    if (requestFileName == true) 
    { 
     fileName = prompt("Enter file name"); 
    } 

    var myTextArea = document.getElementById(inputField).value 
    myTextArea.innerHTML = fileName; 
}; 

function extendDefaults(source, properties) { 
    var property; 
    for (property in properties) { 
     if (properties.hasOwnProperty(property)) { 
     source[property] = properties[property]; 
     } 
    } 
    return source; 
} 

}()); 

논리 단순히 requestFileName가 true로 설정되어있는 경우, 지정된 버튼이 클릭되면, 지정된 입력 필드의 이름을 디스플레이하는, 다음을 표시 할 함수 프롬프트가 아닌 이름이면 기본값 인 임의의 문자열을 사용합니다.

하지만 buttonId에 대해 null이 표시됩니다 ... 이에 대한 조언을받을 수 있습니까? 여기

그래서 자바 스크립트 this에 가지 까다로운입니다 jsFiddle

답변

0

입니다.

먼저, 함수 내에서 변수를 정의 : var buttonId, inputField, requestFileName, fileName;

그리고이 시점에서, 그러나 this.buttonId = null;

this 말을하여 다시 정의하려는 것처럼 다음 을 보인다는 window을 말한다 개체가 아니라 당신의 기능. 그래서 여러분이 근본적으로 한 것은 buttonId에 대한 2 개의 변수를 만드는 것입니다.이 변수는 window 개체에 속하며 하나는 함수 범위 내에 속합니다.

그래서 내려올 때 document.getElementById(buttonId) 일 때 undefined이 아니라 null이 아닌 buttonId입니다.

당신은 그들이 생산을 확인하려면 선언 한 후 디버깅 문에 넣어이를 확인할 수

: 당신이 이벤트 리스너를 첨부 할 경우 buttonId 될 무엇 무엇을, 당신은 아마 제대로 정의 할 필요가

var buttonId, inputField, requestFileName, fileName; 
    console.log(buttonId); // undefined 

    this.buttonId = null; 
    this.inputField = null; 
    this.requestFileName = null; 
    this.fileName = null; 

    console.log(buttonId); // still undefined 
    console.log(this.buttonId); // null 

.

+0

안녕하세요, 저는 null을 얻고있는 것을 이해합니다.하지만 어떻게 해결해야할지 모르겠다. 만약 내가'this'를 사용하지 않는다면, 나는 여전히 변수를 기본값에서 가져올 것이라고 생각했던 것과 같은 결과를 얻는다. if 인스턴스가 지정되지 않았다면? 어떻게해야합니까? – pleasega

관련 문제