当我控制$rootScope
时它没有在对象中显示$digest
函数时,角度是多少?
console.log($rootScope);
但如果我控制$rootScope.$digest
,它将显示该功能。
console.log($rootScope.$digest);
同样适用于$apply
。
答案 0 :(得分:1)
因为这些函数确实没有在对象本身上定义,但是它继承自原型(JavaScript具有原型继承,请阅读更多here。这适用于AngularJS中的所有$ scope对象。
例如,我的浏览器内置控制台对象:
你可以看到它只有两个真正的属性,一个memory
对象,以及对它的原型的引用,可以用作已弃用的__proto__
(原型,继承自另一个!)。因此,原型ConsoleBase
上定义的任何内容也可通过对象console
访问。
AngularJS进一步使用它,使范围继承彼此;当你有一个控制器在另一个控制器内部时,外部控制器可以定义属性,内部控制器可以读取它们 - 但不是反过来,因为内部范围上定义的任何内容都没有出现在外部范围,因为它是它自己的对象。这可能不是最佳解释,因此适用于full story see here。