我刚读过有关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
也出现在父作用域中,那么在这种情况下如何才能查询'原型链'呢?似乎所有示例都应该能够引用父级。
答案 0 :(得分:3)
设置属性时,不会查询原型链。
在对象示例中,您获取范围(anObject
或AnArray
)的属性,然后设置返回对象的属性。
答案 1 :(得分:1)
从Angular范围(例如childScope.aString
)检索值时,如果它未直接包含在该范围内,则会查询父范围。但是,当您直接指定子范围的属性(即childScope.x = y
)时,不会查询父范围。
对于childScope.anArray[1] = '22'
,您不直接分配给子范围的属性。您将通过子范围分配从父作用域检索的对象的属性/索引。您可以将此行分为两行以阐明发生的情况:
var array = childScope.anArray;
array[1] = '22';
第一行参考父作用域,因为您正在检索对象anArray
,而在childScope
中找不到它。但是,当您在索引[1]
处分配值时,您没有分配子作用域的属性,而是将属性分配给从父作用域检索的对象。因为数组对象在两个范围中都是可见的,所以您分配给它的属性也将是。
答案 2 :(得分:0)
您只是向对象添加属性。