Javascript是否可以创建特定对象的原型数组?

Javascript是否可以创建特定对象的原型数组?,javascript,arrays,object,prototype,Javascript,Arrays,Object,Prototype,Helloworld 我想创建一个数组的原型 Array.prototype.foo = function(){} 但我的原型必须仅在该数组仅包含“bar”之类的特定对象时应用 可以用javascript创建这样的原型吗 Array<bar>.prototype.foo = function(){} Array.prototype.foo=function(){} 谢谢大家!! James执行此操作的一种方法是在执行任何其他操作之前检查数组是否包含条,如果不包含,则停止: A

Helloworld

我想创建一个数组的原型

Array.prototype.foo = function(){}
但我的原型必须仅在该数组仅包含“bar”之类的特定对象时应用 可以用javascript创建这样的原型吗

Array<bar>.prototype.foo = function(){}
Array.prototype.foo=function(){}
谢谢大家!!
James执行此操作的一种方法是在执行任何其他操作之前检查数组是否包含
条,如果不包含,则停止:

Array.prototype.foo=function(){
if(this.indexOf('bar')=-1){
抛出“数组必须包含条”;
}
//做必须做的事
控制台日志(“一切正常”);
}
var rightOne=['john','jane','bar'];
var-erroone=['john','jane'];
rightOne.foo();
错的一个;
不,您不能。 您可以检查当前数组中的类型

类栏{}
Array.prototype.foo=函数(){
如果(this.some((n)=>!(n instanceof Bar)))抛出新错误(“不兼容类型”);
log('called');
}
设数组=[1,2];
试一试{
数组。foo();
}捕获(e){
控制台日志(e.message);
}
数组=[new Bar(),new Bar()];

数组。foo()我想你也可以做类似的事情。我认为最好的方法是用一个附加函数来装饰默认的JavaScript数组。下面是一个显示打印功能工作的示例

let test=['a','b','c'];
函数decoratedaray(args){
让装饰=[…args];
装饰过的。打印=()=>{
装饰过的。forEach((arg)=>{
控制台日志(arg);
});
}
返回装饰;
}
测试=装饰阵列(测试);

test.print()使用ES6类,您可以对数组进行子类化,以获取其所有内部方法,并向其中添加您自己的方法,而无需修改本机数组原型

类栏{
建造师(id){
this.id=id
}
}
类Foo扩展了数组{
构造函数(…参数){
超级(…args)
}
foo(){
if(this.some(x=>x instanceof Bar==false))
抛出新错误('Foo只能包含Bar实例')
console.log('所有项目都是条')
还这个
}
}
const pass=新的Foo(新条(1),新条(2))
const fail=new Foo(新条(3),新对象)
pass.foo()

fail.foo()
这里的术语似乎有点混乱,也许你也在想,所以:在这一行
Array.prototype.foo=function(){}您没有创建阵列的原型。您正在使用新属性扩展现有阵列原型(这可能是个坏主意)。你能更精确地解释你想做什么吗?顺便说一句,Javascript不是一种类型化语言,所以第二行是不可能的。你需要通过提供一个用例和期望的行为来扩展你的问题。你不仅不清楚你想要完成什么,你还询问修改Javascript内部,这会给你的应用程序带来一些严重的后果。感觉这是一个问题,你在询问你的解决方案(向
数组添加一个原型),而不是询问你试图通过做出这一重大改变来解决的任何问题。也许如果你问这个问题,人们可以帮你解决。你能在一个例子中使这个可执行文件吗?完美!我喜欢你的解决方案!我不会冒险翻越所有阵列!好的选择。我想指出的是,您不需要返回args,因为它是作为引用传递的。很好的catch Ele。我现在使用扩展操作符将函数更新为纯函数。