我是Java语言的新手。如何通过实例将值传递给函数?
我在该对象/实例中有一些要传递给主函数(类)的值,其中一些值是可选的,如果未传递,则将使用默认值。
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
最佳答案
因此,在Java中,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
的含义。关于javascript - 如何通过实例传递值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40366530/