拦截

拦截让人想到

1、axios的请求、响应拦截器

// 添加请求拦截器axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });// 添加响应拦截器axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  });

2、axios的配置中的transformRequest和transformResponse

  // `transformRequest` 允许在向服务器发送前,修改请求数据
  // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
  // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
  transformRequest: [function (data) {
    // 对 data 进行任意转换处理

    return data;
  }],

  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  transformResponse: [function (data) {
    // 对 data 进行任意转换处理

    return data;
  }],

3、Object.defineProperty(object, propertyName, {})

Object.defineProperty(obj, key, {
    get(){
        Dep.target && dep.addDep(Dep.target);
        return val;
    },
    set(newVal){
        if(newVal === val){
            return;
        }
        val = newVal;
        dep.notify();
    }
})

4、类内部的get和set,拦截属性的存取行为

class MyClass {
  constructor() {
    // ...  }
  get prop() {
    return 'getter';
  }
  set prop(value) {
    console.log('setter: '+value);
  }}


参考:

https://www.kancloud.cn/yunye/axios/234845

http://es6.ruanyifeng.com/#docs/class

猜你喜欢

转载自blog.51cto.com/8898126/2423316