AngularJS $scope 原型继承 - 原始与对象?

2023-12-15

我广泛阅读了有关 Javascript 原型继承的内容,特别是在子作用域中。我的理解是,我们始终确保“。”在我们的 ng-model 绑定中,以便它引用一个对象。

我的问题是......为什么原型继承在其本地范围内创建一个原语而不是一个对象?这似乎是同一件事。

在一种情况下,我们有一个原语。在另一种情况下,我们有一个对象 - 比如说一个数组。更令人困惑的是,我可以将一个对象传递到子作用域(没有“.”),并通过将数据推送到在本地作用域内向下传递的对象,父对象仍然被修改,因此没有子数组对象被建造。再说一遍,为什么?原型继承似乎会自动创建基元……是什么让对象与众不同?


下面是如何从父作用域创建子作用域的简化版本(作为示例)。要获得更全面的视图 - 请访问source

创建父范围:

function Scope(){ }; 
var scope = new Scope(); // scope instance is created

假设它有一些原始属性和一些对象属性:

scope.a = 1;
scope.obj = {a: 1};

创建子作用域实例,其原型为“scope”

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

jsFiddle

所以,当你在做的时候ng-repeat在基元数组上:item in ["a", "b",...]并在其中使用<input ng-model="item">,你本质上是在做childScope.item = "...".

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS $scope 原型继承 - 原始与对象? 的相关文章

随机推荐