【发布时间】:2017-05-11 18:26:39
【问题描述】:
我想实现这个功能:
- 我有一个对象
var obj = {}; -
我在那个 obj 上有三个属性,
obj.zero&obj.one&obj.binaryString-
obj.zero&obj.one是方法,而obj.binaryString是字符串
-
当我链接属性时,我希望它们将各自的数字添加到binaryString。比如:
obj.one.zero.zero.one => 使obj.binaryString = 1001
obj.one.zero.one.one.zero => 使obj.binaryString = 10110
我已经通过这个实现了上述功能:
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'
现在我想注销已完成的binaryString、plus 和additionalString,我已使用以下代码完成:
// placed inside Binary constructor function
Object.defineProperty(obj, 'log', {
get: function() {
return function(additionalString) {
console.log(obj.binaryString + additionalString);
};
}
});
所以用这个当前的代码我可以做到这一点:
binary.one.zero.one.zero.one.log(' is the answer');
// logs out `10101 is the answer`
我想要做的是摆脱 log 并使 one 和 zero 方法可调用或不可调用,以便我可以实现此功能:
binary.one.one.zero.one(' is the result')
// => logs out `1101 is the result`
我该怎么做?
我相信它的功能类似于Chalk 的工作方式:
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
【问题讨论】:
-
使
obj成为一个函数而不是一个普通的对象。给函数.binaryString属性。调用时,该函数可以通过this.binaryString或obj.binaryString获取属性。 -
...像这样:jsfiddle.net/Lbk70spw
-
几个小时前你问了同样的问题...stackoverflow.com/questions/43902656/…