Baseline Widely available
handler.set()
æ¹æ³æ¯è®¾ç½®å±æ§å¼æä½çæè·å¨ã
const monster1 = { eyeCount: 4 };
const handler1 = {
set(obj, prop, value) {
if (prop === "eyeCount" && value % 2 !== 0) {
console.log("Monsters must have an even number of eyes");
} else {
return Reflect.set(...arguments);
}
},
};
const proxy1 = new Proxy(monster1, handler1);
proxy1.eyeCount = 1;
// Expected output: "Monsters must have an even number of eyes"
console.log(proxy1.eyeCount);
// Expected output: 4
proxy1.eyeCount = 2;
console.log(proxy1.eyeCount);
// Expected output: 2
è¯æ³
new Proxy(target, {
set(target, property, value, receiver) {
}
});
åæ°
以䏿¯ä¼ éç» set()
æ¹æ³çåæ°ãthis
ç»å®å¨ handler 对象ä¸ã
target
ç®æ 对象ã
property
å°è¢«è®¾ç½®ç屿§åæ Symbol
ã
value
æ°å±æ§å¼ã
receiver
æåæ¥æ¶èµå¼ç对象ãéå¸¸æ¯ proxy æ¬èº«ï¼ä½ handler ç set æ¹æ³ä¹æå¯è½å¨ååé¾ä¸ï¼æä»¥å ¶ä»æ¹å¼è¢«é´æ¥å°è°ç¨ï¼å æ¤ä¸ä¸å®æ¯ proxy æ¬èº«ï¼ã
夿³¨ï¼ å设æä¸æ®µä»£ç æ§è¡ obj.name = "jen"
ï¼ obj
䏿¯ä¸ä¸ª proxyï¼ä¸èªèº«ä¸å« name
屿§ï¼ä½æ¯å®çååé¾ä¸æä¸ä¸ª proxyï¼é£ä¹ï¼é£ä¸ª proxy ç set()
å¤çå¨ä¼è¢«è°ç¨ï¼èæ¤æ¶ï¼obj
ä¼ä½ä¸º receiver åæ°ä¼ è¿æ¥ã
set()
æ¹æ³åºå½è¿åä¸ä¸ªå¸å°å¼ã
true
ä»£è¡¨å±æ§è®¾ç½®æåãset()
æ¹æ³è¿å false
ï¼é£ä¹ä¼æåºä¸ä¸ª TypeError
å¼å¸¸ãhandler.set()
æ¹æ³ç¨äºæ¦æªè®¾ç½®å±æ§å¼çæä½ã
è¯¥æ¹æ³ä¼æ¦æªç®æ 对象ç以䏿ä½ï¼
proxy[foo] = bar
å proxy.foo = bar
Object.create(proxy)[foo] = bar
Reflect.set()
妿è¿è以ä¸ççº¦ææ¡ä»¶ï¼proxy 伿åºä¸ä¸ª TypeError
å¼å¸¸ï¼
[[Set]]
屿§çæ¯ undefined
ï¼åä¸è½è®¾ç½®å®çå¼ãset()
æ¹æ³è¿å false
ï¼é£ä¹ä¹ä¼æåºä¸ä¸ª TypeError
å¼å¸¸ã以ä¸ä»£ç æ¼ç¤ºå¦ä½æè·å±æ§ç设置æä½ã
var p = new Proxy(
{},
{
set: function (target, prop, value, receiver) {
target[prop] = value;
console.log("property set: " + prop + " = " + value);
return true;
},
},
);
console.log("a" in p); // false
p.a = 10; // "property set: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4