我正在尝试学习如何使用 JS 和 HTML 动态创建对象并对其应用函数。如何使用 <select> 下拉列表的文本/值尽可能直接地调用对象上的函数?过去,我在数组、if then 语句或条件链中使用过函数,但这似乎是额外的工作。我也愿意接受有关动态对象实例创建的建议,因为我不确定我在此示例中的方法是否是最佳实践。这是我的示例: HTML <!DOCTYPE html> <html,javascript,dynamic,dom-events,prototype"/>

首页 > 解决方案 > 在 JS 中“动态”调用一个函数,例如 我正在尝试学习如何使用 JS 和 HTML 动态创建对象并对其应用函数。如何使用 <select> 下拉列表的文本/值尽可能直接地调用对象上的函数?过去,我在数组、if then 语句或条件链中使用过函数,但这似乎是额外的工作。我也愿意接受有关动态对象实例创建的建议,因为我不确定我在此示例中的方法是否是最佳实践。这是我的示例: HTML <!DOCTYPE html> <html

问题描述

标签: javascriptdynamicdom-eventsprototype

解决方案


// Class and its functions
function myClass() {
    this.existingProperty = 5;
}
myClass.prototype.myFunction = function () {
    this.resultProperty = this.newProperty + this.existingProperty;
}
myClass.prototype.myFunction2 = function () {
    this.resultProperty = this.newProperty * this.existingProperty;
}

// Memory
const locoParentis = {};
let nameField;

// Name of object instance of myClass (for example: type dogs into the brower/HTML "name" input)
document.querySelector('#name').addEventListener('change', (e)=>{
    nameField = e.target.value;
})
// Add the new objeect instance to the array (for example: click add new object to create an object called dogs with an existingProperty of 5)
document.querySelector('#new').addEventListener('click', ()=>{
    locoParentis[nameField] = new myClass();
    console.log(locoParentis);
})
// Create/set new property in object instance (for example: typing 9 in the property value input sets dogs' newProperty to 9)
document.querySelector('#property').addEventListener('input', (e)=>{
    locoParentis[nameField].newProperty = Number(e.target.value);
    console.log(locoParentis);
})

document.querySelector('#functions').addEventListener('change', (e)=>{
    // you can check here for undefined 
    locoParentis[nameField][e.target.value]();
    console.log(locoParentis[nameField].resultProperty);
})
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <input id="name" placeholder="name">
        <button id="new">add new object</button>
        <br>
        <input id="property" placeholder="property value">
        <select id="functions">
            <option>apply a function</option>
            <option value="myFunction">sum</option>
            <option value="myFunction2">multiply</option>
        </select>
    </body>
</html>

试试这个。

但是有一些事情需要考虑。您不需要添加单独的“添加新对象”按钮。当您选择是求和还是乘法时,可以创建一个新实例。


推荐阅读