在Angular范围和其中包含的对象中分配值

时间:2013-06-17 18:27:15

标签: javascript angularjs

我刚读过有关JavaScript继承和Angular Scopes的这篇文章: https://github.com/angular/angular.js/wiki/Understanding-Scopes

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

  

假设我们这样做:

childScope.aString = 'child string'

然后跟进:

  

假设我们这样做:

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

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

我不明白的是aString也出现在父作用域中,那么在这种情况下如何才能查询'原型链'呢?似乎所有示例都应该能够引用父级。

3 个答案:

答案 0 :(得分:3)

设置属性时,不会查询原型链。

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

答案 1 :(得分:1)

从Angular范围(例如childScope.aString)检索值时,如果它未直接包含在该范围内,则会查询父范围。但是,当您直接指定子范围的属性(即childScope.x = y)时,不会查询父范围。

对于childScope.anArray[1] = '22',您直接分配给子范围的属性。您将通过子范围分配从父作用域检索的对象的属性/索引。您可以将此行分为两行以阐明发生的情况:

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

第一行参考父作用域,因为您正在检索对象anArray,而在childScope中找不到它。但是,当您在索引[1]处分配值时,您没有分配子作用域的属性,而是将属性分配给从父作用域检索的对象。因为数组对象在两个范围中都是可见的,所以您分配给它的属性也将是。

答案 2 :(得分:0)

您只是向对象添加属性。