有没有办法在JavaScript中代理对属性的调用?

有没有办法在JavaScript中代理对属性的调用?,javascript,Javascript,我想向JavaScript中的字符串添加一个count属性,该字符串在内部调用length属性。我不想把它作为函数添加。如何做到这一点 "abc".count; // 3 您可以尝试这样做: Object.defineProperty(String.prototype,'count'{ get:function(){返回this.length;} }); console.log( “abc”。计数//3 )您可以尝试执行以下操作: Object.defineProperty(String

我想向JavaScript中的字符串添加一个count属性,该字符串在内部调用length属性。我不想把它作为函数添加。如何做到这一点

"abc".count;  // 3

您可以尝试这样做:

Object.defineProperty(String.prototype,'count'{
get:function(){返回this.length;}
});
console.log(
“abc”。计数//3

)
您可以尝试执行以下操作:

Object.defineProperty(String.prototype,'count'{
get:function(){返回this.length;}
});
console.log(
“abc”。计数//3

)
虽然我是ES5的粉丝,但ES6带来的一件好事是代理。您不必使用它们,但它们将赋予您很大的灵活性和一致性:

function convertToProxy(x){
    x = Object(x);
    let proxy = new Proxy(x,{
        get: function(x,key,proxy){
            switch (key) {
                case "count":
                    return 3;
                default:
                    return function(){
                        return "hmmmm"
                    };
            }
        },
        getPrototypeOf: function(x){
            return String.prototype;
        }
    });
    return proxy;
}

let y = convertToProxy("abc");
y + "a" // "hmmmma"
y - 3 // NaN
y.count - 3 //0

虽然我是ES5的粉丝,但ES6带来的一件好事就是代理。您不必使用它们,但它们将赋予您很大的灵活性和一致性:

function convertToProxy(x){
    x = Object(x);
    let proxy = new Proxy(x,{
        get: function(x,key,proxy){
            switch (key) {
                case "count":
                    return 3;
                default:
                    return function(){
                        return "hmmmm"
                    };
            }
        },
        getPrototypeOf: function(x){
            return String.prototype;
        }
    });
    return proxy;
}

let y = convertToProxy("abc");
y + "a" // "hmmmma"
y - 3 // NaN
y.count - 3 //0