首页 > 解决方案 > Javascript - 是否有对象传播 polyfill 的 cdn 链接?

问题描述

我正在为 javascript 中的对象扩展运算符搜索 polyfill。有没有人有一个 CDN 链接,或者如果没有办法用 es5 javascript 做到这一点?

var i = {
  test: 123,
  test1: 5234
}

var b = {
  ...i,
  test3: 243
}

标签: javascriptpolyfillsbabel-polyfill

解决方案


不,这是不可能的。对象扩展是语法,所以它不能被 polyfill。只能填充新对象和方法,但不能填充新语法。

但是,您可以使用 Babel 转译代码:http : //babeljs.io/

"use strict";

function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? arguments[i] : {};
    var ownKeys = Object.keys(source);
    if (typeof Object.getOwnPropertySymbols === "function") {
      ownKeys = ownKeys.concat(
        Object.getOwnPropertySymbols(source).filter(function(sym) {
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
        })
      );
    }
    ownKeys.forEach(function(key) {
      _defineProperty(target, key, source[key]);
    });
  }
  return target;
}

function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }
  return obj;
}

var i = {
  test: 123,
  test1: 5234
};

var b = _objectSpread({}, i, {
  test3: 243
});

丑陋,但它会工作,并且可以自动完成。

对于这种特殊情况,您可以填充Object.assign并使用:

var b = Object.assign({}, i, { test3: 243 });

推荐阅读