是否可以覆盖某些Javascript命令?

是否可以覆盖某些Javascript命令?,javascript,methods,javascript-objects,Javascript,Methods,Javascript Objects,如果我创建了一个具有数组作为属性的对象,是否可以在该对象中编写一个方法,使其在创建实例后,硬编码命令现在的行为有所不同 例如,如果我定义了一个构造函数: function Bunny(){ this.arr = [1,2,3]; this.doSomething = function(){ // do something here } } 然后创建了一个新实例: fluffy = new Bunny(); 是否可以在“thi

如果我创建了一个具有数组作为属性的对象,是否可以在该对象中编写一个方法,使其在创建实例后,硬编码命令现在的行为有所不同

例如,如果我定义了一个构造函数:

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)是,比如说,弹出一个警告,上面写着“复活节快乐!”?

您可以在某种程度上。输入:

代理充当对象周围的包装器,允许您拦截该对象属性上的某些事件

让arr=[1,2,3];
//将数组包装在代理中
arr=新代理(arr{
获取(目标、名称){
//每当用户访问第i个元素时
//警惕,‘复活节快乐!我很高兴。’
警报(`Happy Easter!${name}`);
//返回实际值
返回目标[名称];
},
//你也可以设定目标
设置(目标、名称、值){
//每当用户设置第i个元素时
//警惕,‘圣诞快乐!我很高兴。’
警惕(`圣诞快乐!${name}`);
目标[名称]=值;
}
});
//仍然可以设置值,因为没有设置setter
arr[0]=7;

console.log(arr[0])在某种程度上你可以。输入:

代理充当对象周围的包装器,允许您拦截该对象属性上的某些事件

让arr=[1,2,3];
//将数组包装在代理中
arr=新代理(arr{
获取(目标、名称){
//每当用户访问第i个元素时
//警惕,‘复活节快乐!我很高兴。’
警报(`Happy Easter!${name}`);
//返回实际值
返回目标[名称];
},
//你也可以设定目标
设置(目标、名称、值){
//每当用户设置第i个元素时
//警惕,‘圣诞快乐!我很高兴。’
警惕(`圣诞快乐!${name}`);
目标[名称]=值;
}
});
//仍然可以设置值,因为没有设置setter
arr[0]=7;

console.log(arr[0])
@LincolnBergeson相关问题的答案几乎没有提到
代理
,这是现在做这件事的正确方法。@Alnitak对getter和setter没有希望了吗?@LincolnBergeson AFAIK除了通过
代理
之外,没有办法实现对(最初)未定义数组索引属性的访问。getter和setter只适用于您已经知道的属性。@LincolnBergeson相关问题的答案几乎没有提到
Proxy
,现在这是正确的方法。@Alnitak getter和setter没有希望了吗?@LincolnBergeson AFAIK无法实现访问(最初)未定义的数组索引属性,而不是通过
代理
。getter和setter只适用于您已经知道的属性。太好了!谢谢当用户访问第i个元素时,是否也可以执行一个操作来警告('Happy Easter!'+i)?@bloomers绝对可以!我刚刚更新了我的答案,告诉你怎么做。太棒了!非常感谢!伟大的谢谢当用户访问第i个元素时,是否也可以执行一个操作来警告('Happy Easter!'+i)?@bloomers绝对可以!我刚刚更新了我的答案,告诉你怎么做。太棒了!非常感谢!