在淘汰赛中这个和自己的关键字用法有什么区别吗?

时间:2015-05-29 11:00:56

标签: javascript knockout.js

我只是想知道自我和这个关键字用法之间有什么区别,或者两者都是相同的

请参阅此示例使用此关键字

var ViewModel = function(first, last) {
  this.first = ko.observable(first);
  this.last = ko.observable(last);
  this.full = ko.computed(function() {
     return this.first() + " " + this.last();
  }, this);
};

请参阅此示例,该示例使用self关键字而不是此关键字

var ViewModel = function(first, last) {
  var self=this;
  self.first = ko.observable(first);
  self.last = ko.observable(last);
  self.full = ko.computed(function() {
     return self.first() + " " + self.last();
  }, self);
};

哪种方法很好,为何被接受?感谢

1 个答案:

答案 0 :(得分:1)

Reading the documentation似乎ko.computed本质上使用第二个arg作为上下文返回绑定函数。

所以,不,在这种情况下似乎没有任何实际的区别。

绑定函数内部存在细微差别:

self.full = ko.computed(function() {
     return self.first() + " " + self.last();
  }, self);

函数内部的selfself.first())正在创建外部作用域的闭包(声明self)。因此,定义上下文的第二个参数不是真正需要的:

self.full = ko.computed(function() {
     return self.first() + " " + self.last();
  });

但是,可以在不改变行为的情况下将其更改为:

self.full = ko.computed(function() {
     return this.first() + " " + this.last();
  }, self);