js 高级技巧

作者: 摆渡侠 | 来源:发表于2019-04-24 14:33 被阅读0次
  1. 惰性载入函数
    function createXHR(){
        if(typeof XMLHttpRequest != 'undefined'){
        
            createXHR = function(){
                return new XMLHttpRequest();
            }
        }else if(typeof ActiveXObject != 'undefined'){
            createXHR = function(){
                return new ActiveXObject();
            }
        }else{
        
            createXHR = function(){
              throw new Error('no xhr object available')
            }
        }
        
        return createXHR();
    }
  1. 函数绑定 bind函数简单实现(还有更高级的封装,这里不多做介绍,只写最核心的几句)
    function bind(fn, context){
        return  function(){
            return fn.apply(context, anguments)
        }
    }
    var handler = {
        message: 'event handled',
        handleClick: function(event){
            console.log(this.message, event.type)
        }
    }
    
    var btn = document.querySelector('.btn');
    
    btn.addEventListener('click', bind(handler.handleClick, handler))
  1. 函数柯里化
    // 定义 柯里化是指这样一个函数(假设叫做createCurry),他接收函数A作为参数,运行后能够返回一个新的函数。并且这个新的函数能够处理函数A的剩余参数。
    这里因为比较多,不写重复了,大家参考https://www.codementor.io/michelre/currying-in-javascript-g6212s8qv
  1. 防篡改对象
1. 不可拓展对象
var p = {name: 'xm'}

判断是否不可拓展 Object.preventExtensions()
Object.isExtensible(p);    //true
Object.preventExtensions(p);
p.age = 29;
console.log(p.age)   // undefined

Object.isExtensible(p);    //false

2. 密封对象

var p = {name: 'xm'}

判断对象是否为密封对象
Object.isSealed(p)   //   false
Object.seal(p)
p.age = 18       //静默失败
delete p.name  //静默失败 

Object.isExtensible(p);    //false
Object.isSealed(p)   // true

3. 冻结的对象

var p = {name: 'xm'}

判断对象是否为冻结对象
Object.isForzen(p)    // false
Object.freeze(p)     
p.age =  17         //静默失败
delete p.name       //静默失败
p.name = 'xh'       //静默失败

Object.isExtensible(p);    //false
Object.isSealed(p)   // true
Object.isForzen(p)    // true

总结: 不可拓展对象不能为对象添加属性,但是能删除和修改属性
        密封对象不能为对象添加属性也不能删除属性,但是能修改属性值
         冻结对象不能为对象添加和删除属性,也不能修改属性值
  1. 高级定时器
1.重复定时器,用setTimeout 接连调用代替setInterval
setTimeout( () => {
    // do something
    setTimeout(() => {
        // do something
    })
})

2. 函数节流,主要运用在快速输入搜索,或者resize事件等频繁调用场景
function throttle(method, context) {
  clearTimeout(method.tId);
  method.tId = setTimeout( () => {
    method.call(context);
  })
}

相关文章

  • JS------数组 reduce() 方法详解及高级技巧

    JS进阶篇--JS数组reduce()方法详解及高级技巧

  • 正则表达式

    JS高级技巧 本篇是看的《JS高级程序设计》第23章《高级技巧》做的读书分享。本篇按照书里的思路根据自己的理解和经...

  • JS 高级技巧

    安全类型检查 typeof 检测类型机制并非完全可靠,所以直接使用 Object.prototype.toStri...

  • JS高级技巧

    文章来源地址:https://juejin.im/post/59ab7b36f265da24934b2470;

  • js 高级技巧

    惰性载入函数 函数绑定 bind函数简单实现(还有更高级的封装,这里不多做介绍,只写最核心的几句) 函数柯里化//...

  • JS - 高级技巧(1)

    安全数据类型监测 typeof : 由于一些无法预知的情况, 用这种方式会得到不靠谱的结果。instanceof ...

  • JS数组reduce()方法详解及高级技巧

    JS数组reduce()方法详解及高级技巧https://www.jianshu.com/p/e375ba1cfc...

  • iOS核心动画高级技巧 - 8

    iOS核心动画高级技巧 - 1iOS核心动画高级技巧 - 2iOS核心动画高级技巧 - 3iOS核心动画高级技巧 ...

  • JS学习20(高级技巧)

    高级函数 函数本质上是很简单且过程化的,但是由于JS天生的动态的特性,从使用方式上可以很复杂。 安全的类型检测 虽...

  • 最新web前端相关课程学习链接

    js基础篇 js进阶篇 js高级篇 vue基础篇 vue高级篇 react基础 react高级 Nodejs基础 ...

网友评论

    本文标题:js 高级技巧

    本文链接:https://www.haomeiwen.com/subject/zjhggqtx.html