Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript '的价值是什么;这个';?_Javascript_Knockout.js - Fatal编程技术网

Javascript '的价值是什么;这个';?

Javascript '的价值是什么;这个';?,javascript,knockout.js,Javascript,Knockout.js,我试图理解以下代码: var MyModel = function (folders) { var thisType = this; this.callType = ko.computed({ read: function () { return "openLink"; }, owner: this }); 为什么要将“thisType”设置为“this” 正在阅读 “管理‘这’ 如果您想知道ko

我试图理解以下代码:

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

    this.callType = ko.computed({
        read: function () {
            return "openLink";
        },
        owner: this
    });
为什么要将“thisType”设置为“this”

正在阅读

“管理‘这’ 如果您想知道ko.computed的第二个参数是什么(我们在前面的代码中传递这个参数的位),它在计算计算的可观测值时定义了这个值。如果不传入它,就不可能引用this.firstName()或this.lastName()。有经验的JavaScript程序员会认为这是显而易见的,但如果你仍然了解JavaScript,这可能会显得很奇怪。(像C#和Java这样的语言从来不希望程序员为此设置值,但JavaScript会,因为默认情况下,它的函数本身不是任何对象的一部分。)


“this”是页面对象吗?

在JS中,这是指上下文执行

我喜欢以下摘录:

在JavaScript中,这总是指我们正在使用的函数的“所有者” 执行,或者更确切地说,对函数作为方法的对象执行。 当我们在页面中定义忠实的函数doSomething()时 所有者是页面,或者更确切地说,是的窗口对象(或全局对象) JavaScript。不过,onclick属性属于HTML元素 它属于我


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

我很高兴你问了这个问题。 我喜欢认为自己是一个相当有经验的js程序员,但当我在淘汰赛js文档中遇到这一点时,我还是加倍考虑了

为什么要将此类型设置为此

调用外部函数时,您可能仍希望访问此引用的对象。利用闭包,可通过将
保存到父函数中的变量来实现

我能想到的最好的例子是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();
};
内容
document.getElementById(“测试”).onclick=函数(e){
var self=这个;
功能测试(){
警报(此);//[对象窗口]
警报(自身);//[object HtmlLevel]
}
test();
};
“this”是页面对象吗


正如其他人所指出的,关于这个关键字有很多问题。

可能这个变量在下面的某个地方使用过……向我们展示整个代码!如果没有,你可以省略它。是指“上下文”的特殊关键字,取决于函数的调用方式。例如,在
new MyModel()
中,它将是一个实例。它的可能重复引用回函数的调用上下文。请在发布前在此搜索SO。下面是一个非常相关的线程JavaScript“this”关键字