我已经广泛阅读了有关Javascript原型继承的内容,特别是在子范围内。我的理解是,我们始终确保“。”在我们的ng-model绑定中,以便它引用一个对象。
我的问题是......为什么原型继承在其本地范围内创建一个原语而不是一个对象?这似乎是一回事。
在一个案例中,我们有一个原始的。在另一种情况下,我们有一个对象 - 比如一个数组。更令人困惑的是,我可以将一个对象传递给子作用域(没有“。”),并且通过将数据推送到在本地作用域内传递的对象,父对象仍然被修改,因此没有子数组对象被建造。再次,为什么?原型继承似乎是自动创建原语......是什么让对象变得不同?
答案 0 :(得分:1)
这是一个简化的(例子)版本,用于从父作用域创建子作用域。要获得更全面的视图,请转到source
创建父范围:
function Scope(){ };
var scope = new Scope(); // scope instance is created
假设它有一些原始属性和一些对象属性:
scope.a = 1;
scope.obj = {a: 1};
创建子范围实例,其原型为"范围"
function ChildScope(){ };
ChildScope.prototype = scope;
var childScope = new ChildScope(); // an instance of the child scope
现在,让我们看看:
console.log(scope.a); // should be 1
console.log(childScope.a); // should be 1
console.log(scope.obj.a); // should be 1
console.log(childScope.obj.a); // should be 1
正如所料,对吧?
如果我们现在在childScope
childScope.a = 2;
childScope.obj.a = 3;
然后是输出:
console.log(scope.a); // should still be 1
console.log(childScope.a); // should be 2 now
console.log(scope.obj.a); // should be 3
console.log(childScope.obj.a); // should be 3
因此,当您对基元数组ng-repeat
进行item in ["a", "b",...]
时,使用<input ng-model="item">
并使用childScope.item = "..."
时,您实际上正在执行{{1}}。