Je dois avoir un de ces jours où on oublie tout :)
Alors que @ la réponse de NilColor est correcte, et je ne sais que ce que je viens ne pensais pas avec le chapeau correct sur.
De toute façon, j'ai décidé que j'aime toujours l'idée d'avoir un emballage qui nécessite un peu moins de spécificité lorsque vous l'attachez à vos objets. Et est un peu moins verbeux.
Donc, je l'ai écrit avec ma ligne de pensée originale, vous pourriez l'aimer.
myObj.wrap = function(path, context){
var wrapper,
method = (typeof path != 'string' && context)? path : this,
context = (typeof path === 'object' && context === undefined)?
path : (context || this);
if (typeof path === 'string'){
path = path.split('.');
for (var i = 0; i < path.length; i++){
method = method[path[i]];
if (context === true )
context = (i === path.length - 2)? method : context;
};
};
wrapper = function(){
method.apply(context, arguments);
};
return wrapper;
}
usage:
lier un certain nombre de méthodes imbriquées pour myObj
myObj.wrap('foo') //binds myObj.foo to myObj
// or
myObj.wrap('foo.bar') //binds myObj.foo.bar to myObj
//or if myObj is a function
myFunc.wrap() // binds myFunc to myFunc
Bind un procédé de myObj à un autre objet
myObj.wrap('foo.bar', someObj) //binds myObj.foo.bar to someObj
//or if myObj is a function
myFunc.wrap(someObj) //Binds myFunc to someObj
Bind une méthode imbriquée à son parent
myObj.wrap('foo.bar', true) // binds myObj.foo.bar to myObj.foo
utilisation comme aide
myObj.wrap(someFunc, someObj) //binds someFunc to someObj
Si vous cherchez une réponse à la question initiale non dans le contexte de la méthode de liaison.
myObj.getProps = function(path, context){
var context = context || this;
path = path.split('.');
for (var i = 0; i < path.length; i++){
context = context[path[i]];
};
return context;
};
Utilisation:
joindrez à un objet ou en fonction autonome
obtenir les propriétés
myObj.getProps('foo.bar') // returns mayObj.foo.bar
Donnez-lui un objet de contexte
myObj.getProps('user.name', myAccounts) // returns myAccounts.user.name
pour l'utiliser en fonction autonome remplacer
myObj.getProps = function(path,context){....}
avec
function getProps(path,context){....}
Remarque
Si vous utilisez comme fonction autonome, vous aurez besoin de se rappeler qu'il va commencer à la recherche de la portée de this
. Donc, s'il est défini dans la portée globale, vous devez fournir des chemins complets.
par exemple.
getProps('myObj.foo.bar')
Vous pouvez toujours utiliser le sélecteur de contexte pour modifier l'objet de référence.
+ 1 Réponse brillante. Devrait avoir plus de upVotes. – User2