Javascript AngularJS$scope原型继承-原语与对象?
我已经广泛阅读了有关Javascript原型继承的内容,特别是在子作用域中。我的理解是,我们总是确保ng模型绑定中有一个“.”,以便它引用一个对象 我的问题是。。。为什么原型继承在其局部作用域上创建一个基元而不是一个对象?看起来是一样的 在一个例子中,我们有一个原语。在另一种情况下,我们有一个对象,比如说一个数组。更令人困惑的是,我可以将一个对象传递给子范围(不带“.”),通过将数据推送到在本地范围内传递的对象上,父对象仍然会被修改,因此不会创建子数组对象。再说一遍,为什么?原型继承似乎可以自动创建原语。。。是什么让一个对象与众不同?下面是一个简化版本,说明如何从父范围创建子范围。要获得更全面的视图,请访问 父作用域已创建:Javascript AngularJS$scope原型继承-原语与对象?,javascript,angularjs,scope,Javascript,Angularjs,Scope,我已经广泛阅读了有关Javascript原型继承的内容,特别是在子作用域中。我的理解是,我们总是确保ng模型绑定中有一个“.”,以便它引用一个对象 我的问题是。。。为什么原型继承在其局部作用域上创建一个基元而不是一个对象?看起来是一样的 在一个例子中,我们有一个原语。在另一种情况下,我们有一个对象,比如说一个数组。更令人困惑的是,我可以将一个对象传递给子范围(不带“.”),通过将数据推送到在本地范围内传递的对象上,父对象仍然会被修改,因此不会创建子数组对象。再说一遍,为什么?原型继承似乎可以自动
function Scope(){ };
var scope = new Scope(); // scope instance is created
假设它有一些基本属性和一些对象属性:
scope.a = 1;
scope.obj = {a: 1};
创建子范围实例,其原型为“范围”
现在,让我们看看:
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
时:项在[“a”、“b”、…]中,并在其中使用
,您实际上是在执行childScope.item=“…”
原型继承不会创建任何东西。角度将属性添加到当前范围。属性是原语还是对象也不重要,重要的是。对象位于父作用域上,并进行了适当修改,而基本体则没有。我试图理解为什么会是这样。这个问题太广泛了,没有一些可能会引起你们困惑的例子。我不同意@zeroflagL,尽管关于并不重要,因为一旦作用域转变为子作用域,什么保持绑定,什么不受约束肯定会很重要;Charles和@charlietfl,也许我不够明确或者误解了这个问题。问题是:为什么原型继承在其局部作用域上创建一个原语而不是一个对象。因此,如果您有ng model=“something.text”
,则text
将添加到范围.something
。但是如果对象something
在作用域链中的某个位置不存在,那么它将被创建并添加到当前作用域中。如果你的意思不同,Charles,请重新表述这个问题。这个答案并没有真正解释OP的为什么问题,请参考这个问题以获得更广泛的答案:为什么来自JS中原型继承的行为,我已经展示了如何创建子作用域,并将父作用域作为其原型。有一个重复的问题和答案是另一回事。
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