--- title: "object" description: "Object creation and manipulation" weight: 40 type: "docs" --- The `object` function is an intrinsic (always available, no `use()` needed). It is **polymorphic** — its behavior depends on the types of its arguments. ## From a Record ### 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} ``` ## From an Array of Keys ### 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() { print("...") }} var dog = meme(animal) dog.speak = function() { print("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"] ```