我试图理解下面的代码:
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会这样做,因为默认情况下它的函数本身不是任何对象的一部分。)"
这是'这个'页面对象?
答案 0 :(得分:3)
这个指的是上下文执行
我喜欢quirksmode.org的摘录:
在JavaScript中,这总是指我们所使用的功能的“所有者” 执行,或者更确切地说,是一个函数是一个方法的对象。 当我们在页面中定义忠实函数doSomething()时,它就是 owner是页面,或者说是窗口对象(或全局对象) JavaScript的。但是,onclick属性由HTML元素拥有 它属于。
因此,在您的示例中,这将在实例化时具有MyModel的上下文值。
答案 1 :(得分:3)
我很高兴你问这个问题。 我喜欢把自己想象成一个经验丰富的js程序员,但是当我在淘汰赛js文档中遇到这个时,我仍然做了双重考虑。
为什么要将此类型设置为此?
调用外部函数时,您可能仍希望访问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();
};
'this'是页面对象吗?
正如其他人所指出的,关于此关键字有很多documentation。