第一次遇到代码:
var Controller = function($scope){
this._scope = $scope;
}
Controller.$inject = ['$scope'];
Controller.prototype.augmentScope = function() {
this._scope.a = {
methodA: this.methodA.bind(this)
}
}
我真的不理解它的意义。有什么解释吗?
第一次遇到代码:
var Controller = function($scope){
this._scope = $scope;
}
Controller.$inject = ['$scope'];
Controller.prototype.augmentScope = function() {
this._scope.a = {
methodA: this.methodA.bind(this)
}
}
它假设在闭包作用域中(如果没有,则在全局作用域中,例如window
)有一个名为methodA的方法。然后,因为this实际上是提到的封闭作用域,它会将其提醒并分配给通过对象a使用。
因此,您可以通过以下方式执行它:methodA()
或a.methodA()
编辑以解释闭包:
尽管JavaScript在语法上与Java / C ++非常相似,但它与两者都不同,因为当函数被实例化为对象时,它会记住它被实例化的范围。我强烈建议任何人做更多的JS(如果有这样的事情),请查看this article。
在JS中,this
取决于它是否在实例化函数内创建 - AKA:new MyClass()
。指称字面对象,例如:
var myObj={a:this.b}
不会创建一个新的this
对象,并且默认情况下会引用封闭作用域。如果没有被创建,它将成为全局对象,例如浏览器中的window
。
this
的值通常取决于函数的调用方式。.bind
确保this
始终引用传递的值,无论函数如何被调用。了解更多关于this
的知识:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this - Felix Klingthis
的概念,虽然它们之间存在一定的关联,但 .bind
与闭包或作用域毫无关系。 - Felix Kling
.bind(this)
?你有没有阅读关于.bind
的文档?阅读后还有什么不清楚的地方吗? - Felix Klinga
的对象,其中包含1个项,即在a
作用域中定义的函数methodA
。绑定与将其传递给函数的this相关。因此,您需要查看类似于以下内容:this.methodA = function(){}; var a = {methodA: this.methodA.bind(this)};
- Fallenreaperthis
? - Felix Kling