从对象属性中重新运行javascript

时间:2017-03-20 16:27:49

标签: javascript jquery object

您好我来自一个非常强大的OO背景,我正在尝试将我的知识应用于javascript,许多人将其视为OO语言。

所以我要做的是创建一个具有一些静态属性值的对象,以及一些在用户更改选择框的值时动态更改的对象。这工作正常,但只有一次,我不知道为什么。在他们第一次更改我得到的选择框的值

之后
  

swapDetails.newDriver1不是函数

这是我的代码

$(document).ready(function(){
    var swapDetails = {
        oldDriver1:"<?php echo $swapDetails[2];?>",
        oldDriver2:"<?php echo $swapDetails[3];?>",
        missionRef:"<?php echo $swapDetails[1];?>",
        date:"<?php echo $swapDetails[0];?>",
        newDriver1:function(){
             this.newDriver1 = $('#swapDriver1').val();
        },
        newDriver2:function(){
             this.newDriver2 = $('#swapDriver2').val();
        }
    };
    $('#makeDriverSwap').click(function(){
        console.log(swapDetails);
    });

    $('#swapDriver1').change(function(){ swapDetails.newDriver1();});
    $('#swapDriver2').change(function(){ swapDetails.newDriver2();});
});

2 个答案:

答案 0 :(得分:0)

感谢你们指导我到正确方向的所有通信,这里的问题确实是我在javascript中编码,好像它是基于类的。所以我的解决方案是制作setter方法。以下是关注未来的任何人的更新代码:

$(document).ready(function(){
    var swapDetails = {
        oldDriver1:"<?php echo $swapDetails[2];?>",
        oldDriver2:"<?php echo $swapDetails[3];?>",
        missionRef:"<?php echo $swapDetails[1];?>",
        date:"<?php echo $swapDetails[0];?>",
        newDriver1:"",
        newDriver2:"",
        //make object setter methods
        set newDriver1(driver){
            this.newDriver1 = driver;
        },
        set newDriver2(driver){
            this.newDriver2 = driver;
        }
    };
    $('#makeDriverSwap').click(function(){
        console.log(swapDetails);
    });

    $('#swapDriver1').change(function(){ swapDetails.mewDriver1 = $(this).val()}); //call setter method});
    $('#swapDriver2').change(function(){ swapDetails.mewDriver2 = $(this).val()}); //call setter method});
});

再次感谢你指出我正确的方向。

答案 1 :(得分:-1)

newDriver1:function(){
         this.newDriver1 = $('#swapDriver1').val();
    },

问题似乎是您使用上面的代码定义newDriver1作为函数。在该函数内部,您将newDriver1函数重写为字符串值。因此,下次调用此代码时:

    $('#swapDriver1').change(function(){ swapDetails.newDriver1();});

swapDetails.newDriver1();有一个值,并且不是一个函数,因为它已被输入字段的值覆盖。 我建议引入一个不同的字段来存储输入值。