Javascript 如何用文字符号[]代理数组实例
我可以通过Array()或new Array()检测新实例。但是[]呢Javascript 如何用文字符号[]代理数组实例,javascript,arrays,proxy-pattern,Javascript,Arrays,Proxy Pattern,我可以通过Array()或new Array()检测新实例。但是[]呢 const originalArray = Array; Array = new Proxy(Array,{ construct(target, args) { console.log('new array'); const newArray = Reflect.construct(originalArray, args); return newArray; }
const originalArray = Array;
Array = new Proxy(Array,{
construct(target, args) {
console.log('new array');
const newArray = Reflect.construct(originalArray, args);
return newArray;
},
apply(target,thisArg,argArray){
console.log('apply');
Reflect.apply(target,thisArg,argArray);
}
});
var a = [3,2];// no handler
var b = Array(3,2);// apply
var c = new Array(3,2);// new
无法从文字语法截取对象创建
事实上,这在早些时候是可能的,因为有一个bug,它导致了信息泄漏。不可能从文本语法截获对象创建
事实上,这在早些时候是可能的,因为有一个bug,它导致了信息泄漏。文字符号
[]
是一种直接构造数组的快捷方式,而不需要构造函数可能具有的任何重写。尝试代理所有数组似乎是这样的。嗯,好吧,太糟糕了。你实际上在尝试做什么,包括代理数组?可能有一种替代方法,比如创建类MyArray extends Array
。是的,它使用代理处理程序,但语法糖为[],这将是Y解决方案。文字符号[]
是一种快捷方式,可以直接构造数组,而无需构造函数可能具有的任何重写。尝试代理所有数组似乎是这样的。嗯,好吧,太糟糕了。你实际上在尝试做什么,包括代理数组?可能有一种替代方法,比如创建类MyArray extends Array
。是的,它使用代理处理程序,但语法糖为[],这将是Y解决方案。太糟糕了,他们应该禁止跨源脚本加载
,而不是构造函数拦截(对于合法的同源代码) imho@8HoLoN禁止跨源脚本加载将破坏web。每个人都这样做。他们应该只允许脚本使用它,就像它用于fetch/ajax/xmlhttprequest一样(需要时使用服务器头以允许跨源代码)。太糟糕了,他们应该禁止跨源脚本加载
,而不是构造函数拦截(对于合法的同源代码) imho@8HoLoN禁止跨源脚本加载将破坏web。每个人都这样做。他们应该只允许脚本使用它,就像它用于fetch/ajax/xmlhttprequest一样(使用服务器的头,以便在需要时允许跨源)