2013-05-13 98 views
4

我试图理解下面的代码:'this'的价值是什么?

var MyModel = function (folders) { 
    var thisType = this; 

    this.callType = ko.computed({ 
     read: function() { 
      return "openLink"; 
     }, 
     owner: this 
    }); 

为什么集 'thisType' 到 '这个'?

http://knockoutjs.com/documentation/computedObservables.html

“管理‘这个’ 阅读文档如果你想知道到ko.computed第二个参数是什么(我们在前面的代码通过此位),定义在评估计算出来的observable的时候,这个值是不存在的,如果不传入,就不可能引用this.firstName()或this.lastName()。有经验的JavaScript编程人员会认为这很明显,但如果你仍然了解JavaScript似乎有些奇怪(像C#和Java这样的语言从来不希望程序员为此设置一个值,但JavaScript会这样做,因为它的函数本身不是默认情况下的任何对象的一部分)。“

'this'是页面对象吗?

+1

也许这个变量在下面的某个地方使用......向我们展示整个代码!如果没有,你可以省略它。 – Bergi 2013-05-13 11:50:53

+0

['this''](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this)是一个特殊的关键字,它是指“上下文”,并取决于函数是如何调用。在'new MyModel()'中,例如它就是实例。 – Bergi 2013-05-13 11:52:49

+0

[JavaScript“this”关键字]的可能重复(http://stackoverflow.com/questions/3127429/javascript-this-keyword) – 2013-05-13 11:52:52

回答

3

我很高兴你问了这个问题。 我喜欢把自己想象成一个经验丰富的js程序员,但当我在淘汰赛的js文档中遇到这个问题时,我仍然做了两次尝试。

为什么将thistype设置为这个?

当调用外部函数时,您可能仍然需要访问this引用的对象。通过使用闭包,可以将this保存为父函数中的变量。

我能想到的最好的例子是onclick事件。

<div id="test">content</div> 

document.getElementById("test").onclick = function(e){ 
    var self = this; 

    function test(){ 
     alert(this); //[object Window] 
     alert(self); //[object HTMLDivElement] 
    } 
    test(); 
}; 

是 '本' 的页面对象?

正如其他人指出的,关于此关键字有很多documentation

3

在JS 这个指上下文执行

我喜欢quirksmode.org此摘录:

在JavaScript中这始终是指我们 执行功能的“所有者”,或者更确切地说,是函数是一个方法的对象。 当我们在一个页面中定义我们的忠实函数doSomething()时,它的所有者是页面,或者更确切地说,是JavaScript的 的窗口对象(或全局对象)。但是,onclick属性归属于它所属的HTML元素 。

因此,在您的示例中,这将具有MyModel在实例化时的上下文的值。