2016-11-01 56 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