Comments (5)
The offending call to WeakMap.get is here
function makeUnwrapping0ArgMethod(primitive) {
return function builtin() {
var vHandler = directProxies.get(this);
if (vHandler !== undefined) {
return builtin.call(vHandler.target);
} else {
return primitive.call(this);
}
}
};
But there are a number of other identical var vHandler = directProxies.get(this);
instances that are also reachable with this
not being an object (Array.isArray, and Object.prototype.isPrototypeOf exposes makeUnwrapping1ArgMethod).
So I suggest a patch something like
- var vHandler = directProxies.get(this);
+ var vHandler;
+ if (typeof this === 'object' && this !== null) {
+ vHandler = directProxies.get(this);
+ }
at each of those call sites, though perhaps you have a better way of specifying that test.
I'll send a PR which you are free to accept or improve upon.
from harmony-reflect.
You'll need to account for functions, since this is also used on Function.prototype.toString
. Something like:
function isObject(o){
var type = typeof o;
return type === 'object' ? o !== null : type === 'function';
}
from harmony-reflect.
Thank you -- that's right.
I don't have a super deep background in Javascript, so I'll ask: is there a known way of nesting these checks in the right order for best performance, or is it ok (from a performance perspective) to just call WeakMap.get and let it figure out what's an object and throw errors which we catch, like:
try {
vHandler = directProxies.get(this);
} catch (err) {
vHandler = undefined;
}
from harmony-reflect.
@metamatt thanks for the PR. Couldn't have done it better myself. I merged it, added unit tests to testRegression.js
and updated the NPM package.
from harmony-reflect.
Thanks Tom!
from harmony-reflect.
Related Issues (20)
- "proxies not supported on this platform" error when multiple packages require harmony-reflect HOT 9
- get handler with Symbol HOT 6
- Reflect.Loader HOT 2
- Incompatible with Edge browser HOT 4
- Extending proxy classes HOT 3
- Cannot properly Proxy 'os' methods HOT 2
- Possible incompatibility gulp/jscs HOT 1
- Provide option to turn off warning "getOwnPropertyNames trap is deprecated. Use ownKeys instead" HOT 6
- harmony-reflect borks node repl
- Error when using Reflect.construct on ES2015 classes
- Calling Object.getOwnPropertySymbols() on a Proxy throws an error HOT 2
- 'Illegal access' error when using Object.assign() HOT 1
- Is there a way to conditionally load harmony-reflect HOT 2
- Question: Does this work with IE11? HOT 2
- Conflict with `reflect-metadata` HOT 6
- What is the actual license of this package? HOT 2
- Reflect.construct incorrectly calls newTarget, causing infinite loops HOT 1
- Is Reflect.set working as intended?
- Index not found HOT 8
- Does this polyfill works for chrome version 38 ? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from harmony-reflect.