Tôi có hai chức năng trong một đối tượngLàm thế nào để thực hiện chức năng chainable mà không thực hiện? như `obj.fn.fn` thay vì` obj.fn(). fn() `
var obj = {};
obj.fn1 = function(){ console.log('obj.fn1'); return this; };
obj.fn2 = function(){ console.log('obj.fn2'); return this; };
Tôi muốn để có thể làm
obj.fn1.fn2()
obj.fn2.fn1()
Làm cách nào để thực hiện việc này?
EDIT: fn1
và fn2
có thể là chức năng hoặc người truy cập thuộc tính, tôi không quan tâm miễn là họ làm công cụ.
Tôi đã nhìn thấy nó trong nhiều thư viện, như chalkcolor.red.bold('string')
.
Bạn không thể làm điều đó. Vì hàm trong javascript là các giá trị hạng nhất, nên bạn có thể phân biệt giữa hàm và giá trị trả về của hàm. Khi bạn thấy 'color.red.bold', chuỗi là thông qua tra cứu thuộc tính của đối tượng, không phải chức năng. – doldt
@doldt 'color.red' hoạt động như một thuộc tính trong' color.red.bold (..) 'nhưng giống như một hàm trong' color.red (..) '. Vì vậy, các thuộc tính có thể hoạt động như các hàm? Tôi không nhận được nó – laggingreflex
Tôi có thể nhận được một nửa cách đó - http://jsfiddle.net/knn8pu5m/ - nhưng tôi không thể tìm ra cách để cho phép tài sản cuối cùng truy cập được gọi là một chức năng cũng như là một cái gì đó bạn có thể chuỗi từ. Nó sẽ giúp ích nếu bạn đưa ra một ví dụ cụ thể thay vì chỉ nói "nhiều thư viện". – Quentin