为什么“this"被赋给控制器内的一个变量

Why "this" is assigned to a variable inside the controller?

本文关键字:变量 一个 控制器 this quot 为什么      更新时间:2023-09-26

我是Angular的新手,我不明白为什么要把它赋值给控制器中的一个变量。

angular.module('NoteWrangler')
.controller('NoteCreateController', function($http){
    var controller = this;
    this.saveNote = function(note){
        controller.errors = null;
        $http({method: 'POST', url: '/notes', data: note})
        .catch(function(note){
            controller.errors = note.data.error;
        })
    };
});

一般来说,在Javascript(或其他语言)中,"this"被这样保存的原因之一是因为"this"的值不是您在调用同一类/对象中的其他函数时所期望的值。大多数情况下,当从UI调用函数时,"this"的值将是发生单击的DOMElement或第三方对象。然而,您通常会认为"this"是对象引用,因为函数属于对象。

Javascript中"this"的值不能通过词法(通过查看代码结构)作用域来确定。"this"的值是在运行时设置的,取决于所讨论的函数是如何被调用的。

所以本质上你保存了对实际"this"的引用,这样你也可以从其他函数中引用正确的对象。

我强烈推荐这本书来理解"这个":% 20 https://github.com/getify/You-Dont-Know-JS/blob/master/this%20& % 20对象原型/README.md # you-dont-know-js-this——对象原型