有没有办法在JavaScript中代理对属性的调用?
我想向JavaScript中的字符串添加一个count属性,该字符串在内部调用length属性。我不想把它作为函数添加。如何做到这一点有没有办法在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
"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