mi hanno due funzioni in un oggettoCome rendere la funzione concatenabile senza eseguire? come `obj.fn.fn` invece di` obj.fn(). fn() `
var obj = {};
obj.fn1 = function(){ console.log('obj.fn1'); return this; };
obj.fn2 = function(){ console.log('obj.fn2'); return this; };
Voglio essere in grado di fare
obj.fn1.fn2()
obj.fn2.fn1()
Come fare questo?
EDIT: fn1
e fn2
potrebbero essere funzioni o di accesso alle proprietà, non mi importa, purché fanno roba.
L'ho visto in molte librerie, come chalkcolor.red.bold('string')
.
Non puoi farlo. Poiché le funzioni in javascript sono valori di prima classe, è imperativo che tu possa distinguere tra una funzione e il valore di ritorno di una. Quando vedi 'color.red.bold', il concatenamento avviene attraverso la ricerca delle proprietà degli oggetti, non delle funzioni. – doldt
@doldt 'color.red' si comporta come una proprietà in' color.red.bold (..) 'ma come una funzione in' color.red (..) '. Quindi le proprietà possono comportarsi come funzioni? Io non capisco – laggingreflex
Posso arrivare a metà strada - http://jsfiddle.net/knn8pu5m/ - ma non riesco a capire come permettere che l'ultima proprietà a cui si accede possa essere richiamabile come una funzione oltre ad essere qualcosa puoi concatenare. Sarebbe utile se tu dessi un esempio specifico piuttosto che semplicemente "molte librerie". – Quentin