• javascript的argument和克隆方法详解


    arguments.callee

    function test() {
      console.log(arguments.callee)  //指向函数引用 test
    }
    test()

    看以下例子

    var num = (function(n) {
      if (n == 1) return 1
      return n * arguments.callee(n - 1)
    }(6))
    console.log(num)
    //对于立即执行函数,可以通过argements.callee拿到其函数引用

    看以下例子

    function test() {
      console.log(arguments.callee)  // test
      function demo() {
        console.log(arguments.callee) // demo
      }
      demo()
    } test()

    func.caller

    function test() {
      demo()
    }
    function demo() {
      console.log(demo.caller)  //test  谁调用了,调用的那个函数
    }
    test()
    //在es5标准模式下不能使用

    克隆

    克隆有浅克隆和深克隆区分

    看一下例子

    //浅克隆
    var obj = {
      name: 'lyj',
      age: 123,
      sex: '男'
    }
    function clone(origin, target) {
      var target = target || {}
      for(var prop in origin) {
        target[prop] = origin[prop]
      }
      return target
    }
    var obj1 = clone(obj)
    //深度克隆
    var obj = {
      name: 'lyj',
      age: 123,
      sex:
    '男',   card: ['vise', 'mistr'],   wife: {     name: 'abc',     son: {       name: 'def'     }   } } var obj1 = {
    }
    function deepClone(origin, target) {   var target = target || {},   toStr = Object.prototype.toString,   arrStr = '[object Array]'   for(var prop in origin) {     if(origin.hasOwnProperty(prop)) {       if(origin[prop] !== 'null' && typeof(origin[prop]) == 'object') {         target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}         deepClone(origin[prop], target[prop])       } else {         target[prop] = origin[prop]       }     }   }   return target } deepClone(obj, obj1)

    end !!!

  • 相关阅读:
    各种HTTP错误消息含义
    fastjson生成和解析json数据
    javascript性能优化
    js正则表达式test方法、exec方法与字符串search方法区别
    JavaScript中字符串的match与replace方法
    js 字符串indexof与search方法的区别
    JavaScript indexof方法
    JavaScript数组方法说明
    setTimeout模拟setInterval调用
    javascript forEach方法与jQuery each区别
  • 原文地址:https://www.cnblogs.com/lyjfight/p/13826341.html
Copyright © 2020-2023  润新知