如果我创建了一个具有数组作为属性的对象,是否可以在该对象中编写一个方法,以便在创建实例后,硬编码命令现在的行为有所不同?
例如,如果我定义了一个构造函数:
function Bunny(){
this.arr = [1,2,3];
this.doSomething = function(){
// do something here
}
}
然后创建一个新实例:
fluffy = new Bunny();
是否可以在“this.doSomething”中编写一些内容,以便当我执行预定义命令时,例如:
fluffy.arr[0]=7;
所产生的操作(除了或代替将数组的第 0 个条目从 1 更改为 7)是,例如,弹出一个警报,显示“复活节快乐!”?
最佳答案
在某种程度上你可以。输入:Proxies .
代理充当对象的包装器,并允许您拦截该对象属性上的某些事件。
let arr = [1, 2, 3];
// Wrap the array in a proxy
arr = new Proxy(arr, {
get(target, name) {
// Whenever the user accesses the ith element
// alert, 'Happy Easter! i'
alert(`Happy Easter! ${name}`);
// Return the actual value
return target[name];
},
// You can also target setters
set(target, name, value) {
// Whenever the user sets the ith element
// alert, 'Merry Christmas! i'
alert(`Merry Christmas! ${name}`);
target[name] = value;
}
});
// Can still set values since a setter wasn't set
arr[0] = 7;
console.log(arr[0]);
关于javascript - 是否可以覆盖某些 Javascript 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44117686/