【问题标题】:How to use $.extend in vanilla js? [duplicate]如何在香草 js 中使用 $.extend? [复制]
【发布时间】:2016-12-11 03:57:03
【问题描述】:

我已经使用 jQuery 很长时间了,所以在使用 Vanilla JS 进行编码时,我有点想知道我们如何使用类似于 $ 的东西。在原版 JS 中扩展。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    基本上有这三种方法-

    1. 最简单的方法是使用 Object.assign() 函数

    语法 - Object.assign(target, ...sources)

    所以你可以按以下方式编码 -

    var obj1 = { a: 1, c:4 };
    var obj2 = { a: 2, b:3 };
    var copy = Object.assign(obj1, obj2);
    console.log(copy); // { a: 2, c: 4, b: 3 }
    

    即使是深度克隆也可以参考Mozilla Doc.

    1. 否则,如果您想在代码中使用扩展。一个描述如下 - 取自这篇帖子Vanilla JavaScript version of jQuery.extend()

      /* Pass in the objects to merge as arguments.
         For a deep extend, set the first argument to `true`.*/
      
      
      var extend = function () {
      
      // Variables
      var extended = {};
      var deep = false;
      var i = 0;
      var length = arguments.length;
      
      // Check if a deep merge
      if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {
          deep = arguments[0];
          i++;
      }
      
      // Merge the object into the extended object
      var merge = function (obj) {
          for ( var prop in obj ) {
              if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {
                  // If deep merge and property is an object, merge properties
                  if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {
                      extended[prop] = extend( true, extended[prop], obj[prop] );
                  } else {
                      extended[prop] = obj[prop];
                  }
              }
          }
      };
      
      // Loop through each object and conduct a merge
      for ( ; i < length; i++ ) {
          var obj = arguments[i];
          merge(obj);
       }
             return extended;
      };
      

    通过代码中的定义,extend() 函数可用于扩展对象,如下所述 -

    var newObjectShallow = extend(object1, object2, object3);
    
    1. 如果对象很简单(不需要深度克隆),可以使用以下方法 - 提到更多细节here

      var extend = function ( defaults, options ) {
      var extended = {};
      var prop;
      for (prop in defaults) {
          if (Object.prototype.hasOwnProperty.call(defaults, prop)) {
              extended[prop] = defaults[prop];
          }
      }
      for (prop in options) {
          if (Object.prototype.hasOwnProperty.call(options, prop)) {
              extended[prop] = options[prop];
          }
      }
      return extended;
      };
      

    希望这可以帮助任何在本机 js 中搜索 $.extend 实现的人

    【讨论】:

    • 发布一个问题并回答它是可以的,但答案的实质应该发布在这里(如果需要,请提供适当的出处和链接)。否则,只要这些链接继续有效,您的答案就仍然有用。
    • 另外,您可能想提及Object.assign()
    • 谢谢我修改了答案。
    • 风格不佳的代码。很难这样读
    • #2 在我使用它的上下文中实际上不起作用,得到一个 STATUS_ACCESS_VIOLATION
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2023-04-07
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多