By the way, I would prefer using Ak47 over Object.observe for some
cases (if there isn't a significant performance issue). ak47 is not
only for object properties, it's also for observing variables;
var birthdate = ak47(new Date("1.1.1990")),
age = ak47(birthdate, today, function(bd, td){
return parseInt( (td - bd) / 31536000000 );
});
age()
22
It ensures all data structures are observable. And it's fairly simpler
than JavaScript's new accessor and observation APIs.
Here is a use case, assume we have a module like below:
// a.js
var foo = "hello",
bar = hello + " world";
module.exports = {
foo: foo,
bar: bar
};
// b.js
var a = require('./a');
a.foo = "What's up?"
console.log(a.foo); // what's up?
console.log(a.bar); // hello world
When we ignore using classes (or another way to create properties) in
CommonJS modules, we may have two copies of what we export from a
module. One is internal, the other one is external when a client
module overrides the property.
To solve this issue, I was creating properties like below:
var foo = (function(){
var value = undefined;
return function foo(newValue){
if(arguments.length){
value = newValue;
}
return value;
};
}());
And after using this pattern for long time, I came up to the the idea of ak47.
On Mon, Oct 29, 2012 at 5:42 PM, Rick Waldron wrote:Related... v8 just landed support for Object.observe()
-Rick
On Monday, October 29, 2012 at 8:11 PM, Azer Koçulu wrote:
Hi All,
I've created a new JS library for defining properties that can be subscribed
for updates and can interact with eachother.
Check it here;
https://github.com/azer/ak47Readme contains many examples. Here is another one:
var user = ak47({ name: 'joe', 'birthdate': 21 });
user.name() "joe"
user.name.subscribe(console.log);
user.name("mike")
"mike"
"mike" "joe"
Defining a new property that observes another(s):
var greeting = ak47(joe.name, function(name){
return 'Hello ' + name;
});
greeting()
"Hello mike"
joe.name("joe")
greeting()
"Hello joe"
What do you think?
Azer
--
Job Board:
http://jobs.nodejs.org/Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-GuidelinesYou received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to
nodejs@googlegroups.comTo unsubscribe from this group, send email to
nodejs+
unsubscribe@googlegroups.comFor more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en--
Job Board:
http://jobs.nodejs.org/Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-GuidelinesYou received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to
nodejs@googlegroups.comTo unsubscribe from this group, send email to
nodejs+
unsubscribe@googlegroups.comFor more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en --
Job Board:
http://jobs.nodejs.org/Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-GuidelinesYou received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to
nodejs@googlegroups.comTo unsubscribe from this group, send email to
nodejs+
unsubscribe@googlegroups.comFor more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en