2016-11-01 99 views
1

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

我有這個對象/實例中的一些值,我想傳遞給主函數(類),其中一些值是可選的,如果不通過,將使用默認值。

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被設置爲真,那麼它將顯示提示名稱,如果不是,它將使用默認的隨機字符串。

但我得到buttonId null ...我可以得到這方面的建議嗎?

這裏是jsFiddle

回答

0

因此JavaScript this是棘手的一種。

首先,你的函數中定義的變量:var buttonId, inputField, requestFileName, fileName;

然後它看起來像你想重新定義它說this.buttonId = null;

然而this,在這一點上是指window對象,而不是你的功能。所以你基本上做的是爲buttonId創建2個變量 - 一個屬於window對象,一個屬於你的函數範圍。

所以,當你降下來,document.getElementById(buttonId)buttonId在這一點上是undefined,不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是。

+0

嗨,我明白我得到一個null,但我不知道如何解決這個問題,如果我不使用'this',我仍然得到相同的結果,我認爲它會從默認的變量獲取if不是實例如果指定?我如何實現這一目標? – pleasega