访问内部函数范围的元素而不是在淘汰中的外部

时间:2015-03-18 03:45:53

标签: javascript knockout.js scope

我的代码如下。我的构造函数appVM中的var viewData为null,而在激活时我用一些值填充它。现在我必须使用viewData的激活范围而不是外部范围。我应该为我的自我变量分配什么。

var appVM = function () {        
    this.viewData = null;
    this.subscription = ko.observable();      

    this.activate = function (viewActivationData) {
        var self = this;
        self.viewData = viewActivationData.viewData;
    };

appVM.prototype.list = function () {
    var self = this;
    getEmpLists(self.viewData.empId);
};

1 个答案:

答案 0 :(得分:0)

您需要搜索有关闭包在JavaScript中如何工作的教程。

以下是解决问题的几种方法:

首先:(为'this'创建一个闭包)

var appVM = function () {        
    var self = this;
    this.viewData = null;
    this.subscription = ko.observable();      

    this.activate = function (viewActivationData) {
        self.viewData = viewActivationData.viewData;
    };

    appVM.prototype.list = function () {
        getEmpLists(self.viewData.empId);
    };
}

第二:(避免需要关闭)

var appVM = function() {
  var viewData = null;
  var subscription = ko.observable();

  var activate = function(viewActivationData) {
    viewData = viewActivationData.viewData;
  };

  var list = function() {
    getEmpLists(viewData.empId);
  };

  return {
    viewData: viewData,
    subscription: subscription,
    activate: activate,
    list: list,
  };
}

这只是两个简单的例子。还有其他方法可以解决这个问题,但这些可能是最简单的方法。最终,在控制和理解“这个”时,你需要使用几种不同的技术。