1

我刚刚阅读了这篇关于 JavaScript 继承和 Angular 范围的文章: https ://github.com/angular/angular.js/wiki/Understanding-Scopes

他们引用了一些这样的代码:

假设我们然后这样做:

childScope.aString = 'child string'

然后跟进:

假设我们然后这样做:

childScope.anArray[1] = '22'
childScope.anObject.property1 = 'child prop1'

现在第一个将被添加到子范围,因为它在父级中找不到。但是,秒数在父级中找到,因此不会添加到子级。

我不明白的是,它也aString出现在父作用域中,那么在这种情况下,“原型链没有被咨询”是怎么回事?似乎所有的例子都应该可以参考父母。

4

3 回答 3

3

设置属性时不参考原型链。

在对象示例中,您将获取范围(anObjectAnArray)的属性,然后设置返回对象的属性。

于 2013-06-17T18:30:20.530 回答
1

当您从 Angular 范围内检索值时,例如childScope.aString,如果它不直接包含在该范围内,则将咨询父范围。但是,当您直接分配给子范围的属性时,不会参考父范围,即childScope.x = y.

在 的情况下childScope.anArray[1] = '22',您不会直接分配给子范围的属性。您正在通过子范围分配从父范围检索的对象的属性/索引。您可以将此行分成两行以澄清正在发生的事情:

var array = childScope.anArray;
array[1] = '22';

第一行参考了父范围,因为您正在检索对象anArray并且在childScope. 但是,当您在 index 分配值时[1],您并没有分配子范围的属性,而是将属性分配给从父范围检索的对象。因为数组对象在两个范围内都是可见的,所以您分配给它的属性也将是。

于 2013-06-17T18:34:59.180 回答
0

您只是向对象添加属性。

于 2013-06-17T18:30:49.637 回答