手写一些方法

cloneNode 深度克隆节点

 function cloneNode(node) {

      if (node.nodeType == document.TEXT_NODE) {
        return document.createTextNode(node.nodeValue)
      } else if (node.nodeType == document.ELEMENT_NODE) {
        var el = document.createElement(node.tagName)
        var attrNames = node.getAttributeNames()
        for (var attrName of attrNames) {
          el.setAttribute(attrName, node.getAttribute(attrName))
        }
        for (var child of node.childNodes) {
          el.appendChild(cloneNode(child))
        }
        return el
      }

    }

//实现ES6 symbol for函数

//实现symbol for 函数(symbol的属性名称是唯一的)
//建立映射,尽量用Map
var map =new Map()
function symbolFor(key){
  if(map.has(key)){
    return map.get(key)
  }else{
    keySymbol = Symbol(key)
    map.set(key,keySymbol)
    return map
  }
}


//控制台
symbolFor("Symbol(aaa)")
Map(3) {'a' => 1, 'b' => 2}

symbolFor("Symbol(bbb)")
Map(4) {'a' => 1, 'b' => 2}

{"a" => 1}
{"b" => 2}
{"Symbol(aaa)" => }
{"Symbol(bbb)" => }

实现简单symbol.iterator 迭代器

//定义迭代器
var a = [1,2,3,4,5,6]
a[Symbol.iterator] = function() {
  var i = 0
  return {
    next: () => {

      return {
        value: this[i++],
        done: i > this.length
      }
    }
  }

}

//调用
var iter = a[Symbol.iterator]()
iter.next()
//输出
{value: 1, done: false}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值