function updateAttrs (oldVnode, vnode) {
  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
    return
  }
  var key, cur, old;
  var elm = vnode.elm;
  var oldAttrs = oldVnode.data.attrs || {};
  var attrs = vnode.data.attrs || {};
  // clone observed objects, as the user probably wants to mutate it
  if (isDef(attrs.__ob__)) {
    attrs = vnode.data.attrs = extend({}, attrs);
  }

  for (key in attrs) {
    cur = attrs[key];
    old = oldAttrs[key];
    if (old !== cur) {
      setAttr(elm, key, cur);
    }
  }
  // #4391: in IE9, setting type can reset value for input[type=radio]
  /* istanbul ignore if */
  if (isIE9 && attrs.value !== oldAttrs.value) {
    setAttr(elm, 'value', attrs.value);
  }
  for (key in oldAttrs) {
    if (isUndef(attrs[key])) {
      if (isXlink(key)) {
        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
      } else if (!isEnumeratedAttr(key)) {
        elm.removeAttribute(key);
      }
    }
  }
}
function updateAttrs (oldVnode, vnode) {
  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
    return
  }
  var key, cur, old;
  var elm = vnode.elm;
  var oldAttrs = oldVnode.data.attrs || {};
  var attrs = vnode.data.attrs || {};
  // clone observed objects, as the user probably wants to mutate it
  if (isDef(attrs.__ob__)) {
    attrs = vnode.data.attrs = extend({}, attrs);
  }

  for (key in attrs) {
    cur = attrs[key];
    old = oldAttrs[key];
    if (old !== cur) {
      setAttr(elm, key, cur);
    }
  }
  // #4391: in IE9, setting type can reset value for input[type=radio]
  /* istanbul ignore if */
  if (isIE9 && attrs.value !== oldAttrs.value) {
    setAttr(elm, 'value', attrs.value);
  }
  for (key in oldAttrs) {
    if (isUndef(attrs[key])) {
      if (isXlink(key)) {
        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
      } else if (!isEnumeratedAttr(key)) {
        elm.removeAttribute(key);
      }
    }
  }
}
function updateAttrs ( oldVnode , vnode ) { if ( isUndef ( oldVnode . data . attrs ) && isUndef ( vnode . data . attrs ) ) { return } var key , cur , old ; var elm = vnode . elm ; var oldAttrs = oldVnode . data . attrs || { } ; var attrs = vnode . data . attrs || { } ; // clone observed objects, as the user probably wants to mutate it if ( isDef ( attrs . __ob__ ) ) { attrs = vnode . data . attrs = extend ( { } , attrs ) ; } for ( key in attrs ) { cur = attrs [ key ] ; old = oldAttrs [ key ] ; if ( old !== cur ) { setAttr ( elm , key , cur ) ; } } // #4391: in IE9, setting type can reset value for input[type=radio] /* istanbul ignore if */ if ( isIE9 && attrs . value !== oldAttrs . value ) { setAttr ( elm , 'value' , attrs . value ) ; } for ( key in oldAttrs ) { if ( isUndef ( attrs [ key ] ) ) { if ( isXlink ( key ) ) { elm . removeAttributeNS ( xlinkNS , getXlinkProp ( key ) ) ; } else if ( ! isEnumeratedAttr ( key ) ) { elm . removeAttribute ( key ) ; } } } }
/*
/ *
Updates attributes of a node