Ich möchte diese Funktionalität erreichen:Wie man eine Eigenschaft/Methode aufrufbar macht oder nicht?
- ich ein Objekt
var obj = {};
Ich habe drei Angebote in diesem obj,
obj.zero
&obj.one
&obj.binaryString
obj.zero
&obj.one
sind Methoden währendobj.binaryString
haben ist eine Zeichenfolge
Wenn ich die Eigenschaften Kette, mag ich sie ihre jeweilige Stelle nach binaryString
hinzuzufügen. So zum Beispiel:
obj.one.zero.zero.one
=> macht obj.binaryString
= 1001
obj.one.zero.one.one.zero
=> macht obj.binaryString
= 10110
Ich habe die obige Funktionalität mit diesem erreicht:
function Binary() {
var obj = { binaryString: '' };
Object.defineProperty(obj, 'zero', {
get: function() {
obj.binaryString += '0';
return obj;
}
});
Object.defineProperty(obj, 'one', {
get: function() {
obj.binaryString += '1';
return obj;
}
});
return obj;
}
var binary = new Binary();
binary.one.zero.zero.one // => obj.binaryString becomes '1001'
Jetzt möchte ich Loggen Sie sich die ausgefüllten binaryString
, plus und additionalString
, die ich mit dem folgenden Code erreicht haben:
// placed inside Binary constructor function
Object.defineProperty(obj, 'log', {
get: function() {
return function(additionalString) {
console.log(obj.binaryString + additionalString);
};
}
});
Also mit diesem aktuellen Code kann ich dies tun:
binary.one.zero.one.zero.one.log(' is the answer');
// logs out `10101 is the answer`
Was ich tun möchte, ist der log
loswerden und machen die one
und zero
Methoden aufrufbaren oder nicht, so kann ich dies erreichen Funktionalität:
binary.one.one.zero.one(' is the result')
// => logs out `1101 is the result`
Wie kann ich das tun?
Ich glaube, es eine ähnliche Funktionalität wie Chalk Werke wäre:
chalk.blue.bold('Hello world!');
// `blue` is not invoked here but it adds the color blue to the style
chalk.blue('Hello world!');
// `blue` IS invoked here. It adds blue to the style and returns the stylized string
Mache 'obj' zu einer Funktion anstelle eines einfachen Objekts. Geben Sie der Funktion die Eigenschaft '.binaryString'. Wenn sie aufgerufen wird, kann die Funktion die Eigenschaft über 'this.binaryString' oder' obj.binaryString' abrufen. –
... so: https://jsfiddle.net/Lbk70spw/ –
Sie haben vor ein paar Stunden dieselbe Frage gestellt ... http://stackoverflow.com/questions/43902656/make-a-property-either -invokable-or-not – Badacadabra