簡體   English   中英

如何通過實例傳遞值?

[英]How to pass value through instance?

我是Javascript的新手。 如何通過實例將值傳遞給函數?

我在這個對象/實例中有一些值要傳遞給main函數(類),其中一些值是可選的,如果沒有傳遞,將使用默認值。

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;
}

}());

邏輯是在單擊指定的按鈕時在指定的輸入字段中顯示fileName,如果requestFileName設置為true,則它將顯示提示的名稱,否則它將使用默認的隨機字符串。

但是我為buttonId得到了null ...我可以得到關於此的建議嗎?

這是jsFiddle

所以在Javascript中this有點棘手。

首先,您在函數中定義了變量: var buttonId, inputField, requestFileName, fileName;

然后看起來你正試圖通過說this.buttonId = null;來重新定義它this.buttonId = null;

不過this ,此時指的是window對象,而不是你的函數。 所以你基本上做的是為buttonId -one創建屬於window對象的2個變量,以及屬於你函數范圍的變量。

所以當你下來和document.getElementById(buttonId)buttonIdundefined ,不是null

你可以通過在聲明后放入一些調試語句來驗證這一點,看看它們產生了什么:

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

如果要附加事件偵聽器,則可能需要正確定義buttonId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM