如何通过实例传递值?

时间:2016-11-01 18:41:33

标签: javascript

我是Javascript的新手。如何通过实例将值传递给函数?

我在这个对象/实例中有一些值要传递给main函数(class),其中一些值是可选的,如果没有传递,将使用默认值。

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

1 个答案:

答案 0 :(得分:0)

所以在Javascript中this有点棘手。

首先,您在函数中定义了变量:var buttonId, inputField, requestFileName, fileName;

然后看起来就像你正试图通过说this.buttonId = null;

来重新定义它

但是this,此时指的是window对象,而不是你的函数。所以你基本上做的就是为buttonId创建2个变量 - 一个属于window对象,另一个属于你函数的范围。

所以当你下来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的内容。