javascript - 使用 Angular 将对象属性(没有值)复制到另一个对象

标签 javascript angularjs oop copy extend

我们试过了angular.copyangular.extend .但是,这两者都复制属性值。我们如何将一个对象的属性(没有它们的值)复制到另一个对象?

这是一个fiddle我们基于 how-to-quickly-clear-a-javascript-object 的尝试.

angular.module('App', []);

function Ctrl($scope) {

    function copyNotValues(obj) {
        var newObj = angular.copy(obj);
        for (prop in newObj) {
            if(newObj.hasOwnProperty(prop))
            {
                newObj[prop] = null;
            }
        };
        return newObj;
    }

    $scope.master = {
        foo: 'original foo',
        bar: 'original bar'
    };

    $scope.copy = angular.copy($scope.master);
    $scope.extend = angular.extend($scope.master);
    $scope.copyNotValues = copyNotValues($scope.master);

}

最佳答案

JavaScript 没有类的概念。它使用原型(prototype)继承,这意味着您只能通过复制另一个对象来创建新对象。这样做时,您将获得属性。

您可以通过创建一个没有属性值的“主”对象来解决这个问题。像这样:

master = {
  foo: '',
  bar: ''
};

然后您可以使用 new 关键字创建对象的新“实例”:

$scope.master = new master();
$scope.master.foo = 'original foo';
$scope.master.bar = 'original bar';

当您需要创建对象的新实例时,返回到原始对象,而不是您的副本:

$scope.masterCopy = new master();

这实际上是一个 JavaScript 问题,而不是 Angular 特定的问题。我想从理论上讲,您可以编写一个函数来创建对象的新实例,然后遍历属性以将它们全部设置为 null 或空字符串。

关于javascript - 使用 Angular 将对象属性(没有值)复制到另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21742974/

相关文章:

javascript - webgl简单图像效果

javascript - js中如何去掉touchevent?

javascript - 异步下载几个js脚本,然后按顺序执行

oop - 为什么我们在面向对象的分析和设计中使用用例图,即使用例不被视为面向对象?

javascript - 使用javascript显示多个数组

javascript - 这个ng-switch有办法获取吗?

javascript - AngularJS - 没有获得 Controller 或 View 的返回值

javascript - 从其他站点获取 JSON(P)

C++继承误解

Python - 从输入获取子类。我必须编写一个单独的函数吗?