属性如何表现得像函数?

How comes properties act like functions?

如果你安装 colors 你会看到你可以这样写脚本:

var colors = require('colors');

console.log('hello'.green);
console.log('i like cake and pies'.underline.red)
console.log('inverse the color'.inverse);
console.log('OMG Rainbows!'.rainbow);
console.log('Run the trap'.trap);

属性的行为怎么可能像函数(如 [5, 6, 4].count?)。

我理解'Run the trap'.trap()但不理解'Run the trap'.trap

JavaScript 允许您为 setter 和属性定义 getter(甚至在原型上):

Object.defineProperty(Array.prototype, 'count', {
    get: function () {
        return this.length;
    }
});

console.log([1, 2, 3].count);

谨慎使用。颜色,特别是 uses the non-standard __defineGetter__ function instead,但效果相同。

这可以使用 getters 来实现:

Object.defineProperty(String.prototype, "testing", {
    get: function() {
        return this.string + ' some test message ';
    }
});
console.log( 'my string'.testing ); // my string some test message