当前位置: 首页 > 面试题库 >

jQuery扩展与角度扩展

张永嘉
2023-03-14
问题内容

这两个扩展功能有什么区别?

  angular.extend(a,b);
  $.extend(a,b);

尽管jquery.extend有充分的文档记录,但是angular.extend缺少详细信息,并且注释没有提供答案。(https://docs.angularjs.org/api/ng/function/angular.extend)。

angular.extend是否也提供深层复制?


问题答案:

angular.extend并且jQuery.extend非常 相似的。它们都从一个或多个源对象到目标对象进行 浅层
属性复制。因此,例如:

var src = {foo: "bar", baz: {}};
var dst = {};
whatever.extend(dst, src);
console.log(dst.foo);             // "bar"
console.log(dst.baz === src.baz); // "true", it's a shallow copy, both
                                  // point to same object

angular.copy提供 深层 副本:

var src = {foo: "bar", baz: {}};
var dst = angular.copy(src);
console.log(dst.baz === src.baz); // "false", it's a deep copy, they point
                                  // to different objects.

回到extend:我只看到一个显着的区别,那就是jQuery extend允许您仅指定一个对象,在这种情况下,jQuery本身就是目标。

共通的地方:

  • 这是一个浅表副本。因此,如果src具有p引用对象dst的属性,则将获得p引用 同一 对象(而不是对象的副本)的属性。

  • 它们都返回目标对象。

  • 它们都支持多个源对象。

  • 它们都 按顺序 执行多个源对象,因此如果多个源对象具有相同的属性名称,则最后一个源对象将“获胜”。

测试页:实时复制 | 现场直播

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
<meta charset=utf-8 />
<title>Extend!</title>
</head>
<body>
  <script>
    (function() {
      "use strict";
      var src1, src2, dst, rv;

      src1 = {
        a: "I'm a in src1",
        b: {name: "I'm the name property in b"},
        c: "I'm c in src1"
      };
      src2 = {
        c: "I'm c in src2"
      };

      // Shallow copy test
      dst = {};
      angular.extend(dst, src1);
      display("angular shallow copy? " + (dst.b === src1.b));
      dst = {};
      jQuery.extend(dst, src1);
      display("jQuery shallow copy? " + (dst.b === src1.b));
      $("<hr>").appendTo(document.body);

      // Return value test
      dst = {};
      rv = angular.extend(dst, src1);
      display("angular returns dst? " + (rv === dst));
      dst = {};
      rv = jQuery.extend(dst, src1);
      display("jQuery returns dst? " + (rv === dst));
      $("<hr>").appendTo(document.body);

      // Multiple source test
      dst = {};
      rv = angular.extend(dst, src1, src2);
      display("angular does multiple in order? " +
                  (dst.c === src2.c));
      dst = {};
      rv = jQuery.extend(dst, src1, src2);
      display("jQuery does multiple in order? " +
                  (dst.c === src2.c));

      function display(msg) {
        $("<p>").html(String(msg)).appendTo(document.body);
      }
    })();
  </script>
</body>
</html>


 类似资料:
  • 问题内容: 我想对第3方指令(特别是Angular UI Bootstrap)进行较小的修改。我只是想添加指令的范围: 但是我也想让Bower与Angular-Bootstrap保持同步。运行后,我将覆盖所做的更改。 那么,如何与该Bower组件分开扩展该指令? 问题答案: 解决此问题的最简单方法可能是在您的应用上创建与第三方指令同名的指令。这两个指令都将运行,并且您可以使用属性指定运行顺序(优先

  • Portal(制作图表、列表、球形图等) 数据网格视图(DataGrid View) 可编辑的数据网格(Editable DataGrid) 可编辑的树(Editable Tree) 数据网格行过滤(DataGrid Filter Row) 数据网格行拖放(Drag and Drop Rows in DataGrid) 树形网格行拖放(Drag and Drop Rows in TreeGrid)

  • 问题内容: 我正在努力处理nodeJS中对象的深层副本。我自己的延伸就是胡扯。下划线的范围是平坦的。在stackexchange上有相当简单的扩展变体,但没有一个甚至比jQuery.extend(true,{},obj,obj,obj)..(大多数实际上是可怕的,搞砸了asnyc代码的好处。) 因此,我的问题是:NodeJS是否有很好的深层副本?有人移植过jQuery吗? 问题答案: 您需要jQu

  • 包含 Ribbon 文件 如需创建 Ribbon 组件,则要包含 'ribbon.css'、'ribbon-icon.css' 和 'jquery.ribbon.js' 文件。 <link rel="stylesheet" type="text/css" href="themes/default/easyui.css"> <link rel="stylesheet" type="text/css

  • 用法 步骤 1:创建一个 HTML 页面     <div id="pp">         <div></div>         <div></div>         <div></div>     </div> 步骤 2:创建 Portal     $('#pp').portal(options); 步骤 3:向 Portal 添加面板(panel)部件     // cr

  • http://javatar.iteye.com/blog/690845 我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各 BU 和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展