Skip to content

Instantly share code, notes, and snippets.

@steckel
Last active August 29, 2015 14:08
Show Gist options
  • Save steckel/27e2368add9104333b4e to your computer and use it in GitHub Desktop.
Save steckel/27e2368add9104333b4e to your computer and use it in GitHub Desktop.
var assert = require('assert');
var a = {
get a() {
return "a";
}
};
assert.deepEqual(Object.keys(a), ['a'], 'es6 enhanced object literals');
var b = {};
Object.defineProperty(b, 'b', {
get: function() {
return 'b';
},
enumerable: true
});
assert.deepEqual(Object.keys(b), ['b'], 'ES5 getter');
var c = {};
Object.defineProperty(c, 'c', {
get: function() {
return 'c';
},
set: function(c) {
// lol don't care;
},
enumerable: true
});
assert.deepEqual(Object.keys(c), ['c'], 'ES5 getter/setter (setters shouldn\'t change anything)');
var d = {_d:'_d'};
Object.defineProperty(d, 'd', {
get: function() {
return this._d;
},
set: function(d) {
this._d = d;
},
enumerable: true
});
assert.deepEqual(Object.keys(d), ['_d', 'd'], 'ES5 silly proxy/getter of a property');
var e = {};
Object.defineProperties(e, {
'_e': { value: 'e', writable: true },
'e': {
get: function() { return this._e; },
set: function(e) { this._e = e; },
enumerable: true
}
});
assert.deepEqual(Object.keys(e), ['e'], 'defineProperties works the same as defineProperty, right?');
function F() { }
Object.defineProperties(F.prototype, {
'_f': { value: 'f', writable: true },
'f': {
get: function() { return this._f; },
set: function(f) { this._f = f; },
enumerable: true
}
});
var f = new F();
assert.deepEqual(Object.keys(f), [], 'prototype properties aren\'t inherited... why the fuck not?');
function G() {
Object.defineProperties(this, {
'_g': { value: 'g', writable: true },
'g': {
get: function() { return this._g; },
set: function(g) { this._g = g; },
enumerable: true
}
});
}
var g = new G();
assert.deepEqual(Object.keys(g), ['g'], 'at least this works...');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment