Javascript:对象内的函数不起作用

时间:2015-07-14 15:37:50

标签: javascript function object model-view-controller controller

我正在尝试在Javascript中创建一个控制器,它将响应按钮点击并相应地更改视图。

我有一个看起来像这样的功能:

document.getElementById("reset").onclick = function () { 
    //do something

   };

然而,当我尝试将该函数放在一个控制器对象中时,我得到了一个"意外的令牌"错误:

var controller = {
  this.reset = document.getElementById("reset").onclick = function () { 
    //do something

   };
}

我不确定两件事:

  1. 如何解决此错误? (我知道它的范围,但不知道如何以一种仍遵循MVC模式的方式修复它)
  2. 一般来说,这是创建控制器对象的好方法吗? (我是MVC模型的新手,并且不知道我是否遵循最佳实践。)
  3. 感谢。

2 个答案:

答案 0 :(得分:2)

这不是一个有效的Javascript对象结构,但如果它适用于你,你可以在下面进行

var controller = {
  reset : function () { 
    document.getElementById("reset").onclick = function(){
       //do your work here
     }
   }
}

逻辑完全取决于你/开发者他/她想要处理的事情。

或者你可以在外面做绑定的事情,比如,

var controller = {
      reset : function () { 
         //what to do to rsest
       }
    }

然后将其绑定到别处

//when to run reset method
document.getElementById("reset").onclick = controller.reset;

答案 1 :(得分:2)

错误是由于对象不能被声明,有不同的方法:

var obj1 = { 
    a : function() { 
        console.log('obj1'); 
    } 
};

var obj2 = function() { 
    var b = function() { 
        console.log('obj2');
    };

    return { 
        a: b
    }
};

var obj3 = function() {
    this.a = function() { 
        console.log('obj3'); 
     } 
};

然后使用它。

obj1.a; //prints obj1
obj2().a; //prints obj2
new obj3().a; //prints obj3. 

关于如何构建对象是基于意见的,但我喜欢这样做。

var Controller = function() {
    this.attachEvents = function() {
        document.getElementById("reset").onclick = reset;
    }

    var reset = function() {
        console.log('reset');
    };
}
new Controller().attachEvents();

另一种选择是..

var Controller = function() {
    this.reset = function() {
        console.log('reset');
    };
}
var controller = new Controller();
document.getElementById("reset").onclick = controller.reset;