Reputation: 53
Does anyone know what is test[name]
mean?
function test(value){
copy(value||{},this);
}
test[name] = function(){
return "test"
}
Upvotes: 3
Views: 194
Reputation: 208405
This will be easiest to explain with an example:
var name = "foo";
test[name] = function(){
return "test"
};
This would add a property named "foo" to the object test
, and the value of that property is a function. It doesn't matter in this case that the object test
is actually a function, you can assign properties to functions just like any other object in JavaScript.
You could call this function using any of the following methods:
test[name]()
test["foo"]()
test.foo()
Note that test[name]()
will not work if the name
variable is assigned to something different, for example name = 'bar'
.
Upvotes: 6
Reputation: 111820
Taken from the Mozilla page
One can think of an object as an associative array (a.k.a. map, dictionary, hash, lookup table). The keys in this array are the names of object members
There are two ways to access object members: dot notation and bracket notation (a.k.a. subscript operator).
So
test[name] = function (
means: there are (if everything is ok) two objects: test
and name
(and we know that at least test
is present, because you defined it one line before: function test(value)
)
take the test
object (if there isn't a test object
an error will happen). Then access the key/value pair with the key calculated from the name
object and there put a function.
Now, how the key is calculated from the name
object? The same page from before tells us:
Property names must be strings. This means that non-string objects cannot be used as keys in the object. Any non-string object, including a number, is typecasted into a string via the toString method.
Note that the description is a little wrong... test[null] == test["null"]
and test[undefined] == test["undefined"]
, so perhaps the truth is that under the covers something like String(key).valueOf()
is done (the String
function will convert null
to "null"
and undefined
to "undefined"
)
Some examples (where => means "is equivalent to, with this values")
var name = 'foo';
test[name] => test['foo']
var name = 123;
test[name] => test['123']
var name = 123.3;
test[name] => test['123.3']
var name = new Date();
test[name] => test['Wed Aug 14 2013 17:35:35 GMT+0200 (...)']
var name = null;
test[name] => test['null']
var name = undefined;
test[name] => test['undefined']
var name = [];
test[name] => test['']
var name = [1,2,3];
test[name] => test['1,2,3']
var name = {};
test[name] => test['object Object']
and so on...
Upvotes: 0
Reputation: 2773
when you have a javascript object with defined properties you can access the property either with the dot notation obj.property
or with the square brackets notation obj[property]
the property could also be a function so if you have an object:
var test = {
foo : function(arg){ console.log(arg) },
bar : 'hello'
};
you can call test.foo('bar')
also by doing test['foo']('bar')
This is especially useful in iterations or when you dont know a priori what the name of the property is going to be. For example:
var fun = 'foo';
test[fun]('hello world');
Naturally it's up to you to do proper checks such as
if ('function'==typeof test['foo']){ test['foo']('bar'); }
Also note that you can do checks on the fly like so:
test[ fun || 'foo']('hello');
Upvotes: 0
Reputation: 141829
All functions in Javascript are also objects. This adds a property to the test
function object with a value which is an anonymous function.
For example:
function test(){
return "foo";
}
// test is a function, so it is also an object and
// it can have properties assigned to it
test.x = function(){
return "bar";
};
test(); // "foo"
test.x(); // "bar"
Of course just like with any object you can also use bracket notation:
var name = 'hello';
test[name] = function(){
return "HELLO!";
};
test.hello(); // "HELLO!"
Upvotes: 1
Reputation: 227190
In JavaScript, functions are objects. They have properties. test[name]
sets a property (named whatever the name
variable holds) to a function.
Upvotes: 0
Reputation: 29211
Javascript has two sets of notation for accessing objects, dot notation (obj.property) and bracket notation (object[property]). More on that at MDN.
test[name] = function (){}
assigns an anonymous function to the name
property on the the test
object (which itself is a function). In this case (as noted by the comments) the variable name
is being used to access the property.
This may seem a little strange at first, but it's helpful to remember that in javascript, functions are objects.
Upvotes: 1
Reputation: 13106
The brackets are how you reference a property via a key into the hash that javascript objects are.
Upvotes: -1