1.0.0 • Published 6 years ago

proxy-shim v1.0.0

Weekly downloads
1
License
MIT
Repository
-
Last release
6 years ago

proxy-shim

proxy-shimES6 Proxy 기능을 지원하지않는, 브라우저에서 사용할 수 있는 폴리필입니다.

이 라이브러리는 proxy-polyfill 폴리필에 영감받아 만들었습니다.

지원 브라우저

대부분의 ES5 Spec이 구현된 모든 브라우저(IE9+, Safari 6+ 등)

지원 가능한 Proxy trap

get, set, construct, apply

또한, 생성된 Proxy 객체를 소멸 시킬 수 있는 revocable 메서드를 제공한다.

참고 사항

  • 이 폴리필은 네이티브 객체와 최대한 유사한 형태로 개발되었습니다.(예외처리 등)

  • 네이티브와 달리, 초기화된 속성에 대해서만 trap 을 사용하실 수 있습니다.

설치하기

npm i proxy-shim

가져오기

CommonJS 모듈 로더 방식으로 가져오기

const ProxyShim = require('proxy-shim');

\<script> 엘리먼트로 가져오기

<script src="path/to/proxy-shim.min.js"></script>

사용 예제

아래 예제는 MDN에서 제공중인 데모를 수정하여 만들었습니다.

get trap 예제

const ProxyShim = require('proxy-shim');

var p = new ProxyShim({a: 1}, {
  get: function(target, prop, receiver) {
    console.log('called: ' + prop);
    return 10;
  }
});

console.log(p.a); // "called: a" // 10

set trap 예제

const ProxyShim = require('proxy-shim');

var p = new ProxyShim({a: 1}, {
  set: function(target, prop, value, receiver) {
    target[prop] = value
    console.log('property set: ' + prop + ' = ' + value)
    return true
  }
})

console.log('a' in p)  // false

p.a = 10               // "property set: a = 10"
console.log('a' in p)  // true
console.log(p.a)       // 10

construct trap 예제

const ProxyShim = require('proxy-shim');

var p = new ProxyShim(function() {}, {
  construct: function(target, argumentsList, newTarget) {
    console.log('called: ' + argumentsList.join(', '));
    return { value: argumentsList[0] * 10 };
  }
});

console.log(new p(1).value); // "called: 1"  10

apply trap 예제

const ProxyShim = require('proxy-shim');

var p = new ProxyShim(function() {}, {
  apply: function(target, thisArg, argumentsList) {
    console.log('called: ' + argumentsList.join(', '));
    return argumentsList[0] + argumentsList[1] + argumentsList[2];
  }
});

console.log(p(1, 2, 3)); // "called: 1, 2, 3" 6

revocable 메서드 예제

const ProxyShim = require('proxy-shim');

var revocable = ProxyShim.revocable({foo: function(){}}, {
  get: function(target, name) {
    return "[[" + name + "]]";
  }
});

var proxy = revocable.proxy;

console.log(proxy.foo); // "[[foo]]"

revocable.revoke();

console.log(proxy.foo); // TypeError is thrown
proxy.foo = 1;           // TypeError again