# object The `object` function and related utilities handle object creation and manipulation. ## Creation ### object(obj) Shallow copy an object. ```javascript var copy = object(original) ``` ### object(obj, another) Combine two objects. ```javascript object({a: 1}, {b: 2}) // {a: 1, b: 2} object({a: 1}, {a: 2}) // {a: 2} ``` ### object(obj, keys) Select specific keys. ```javascript object({a: 1, b: 2, c: 3}, ["a", "c"]) // {a: 1, c: 3} ``` ### object(keys) Create object from keys (values are `true`). ```javascript object(["a", "b", "c"]) // {a: true, b: true, c: true} ``` ### object(keys, value) Create object from keys with specified value. ```javascript object(["a", "b"], 0) // {a: 0, b: 0} ``` ### object(keys, fn) Create object from keys with computed values. ```javascript object(["a", "b", "c"], (k, i) => i) // {a: 0, b: 1, c: 2} ``` ## Prototypes ### meme(prototype) Create a new object with the given prototype. ```javascript var animal = {speak: function() { log.console("...") }} var dog = meme(animal) dog.speak = function() { log.console("woof") } ``` ### proto(obj) Get an object's prototype. ```javascript var p = proto(dog) // animal ``` ### isa(obj, prototype) Check if prototype is in the chain. ```javascript isa(dog, animal) // true ``` ## Serialization ### splat(obj) Flatten an object's prototype chain into a plain object. Only includes primitive types (numbers, text, booleans, arrays, objects). ```javascript var base = {x: 1} var derived = meme(base) derived.y = 2 splat(derived) // {x: 1, y: 2} ``` When sending objects between actors with `$send`, they are automatically splatted. ## Key Iteration ```javascript var obj = {a: 1, b: 2, c: 3} // Get all keys var keys = array(obj) // ["a", "b", "c"] // Iterate for (var key in obj) { log.console(key, obj[key]) } ```