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