Javascript是否有可能创建特定对象的原型Array?

时间:2018-02-09 14:36:24

标签: javascript arrays object prototype

的Helloworld,

我想创建一个数组原型。

Array.prototype.foo = function(){}

但是我的原型只有在这个数组只包含像“bar”这样的特定对象时才能应用 是否可以在javascript中创建这样的原型? :

Array<bar>.prototype.foo = function(){}

谢谢! 詹姆斯

4 个答案:

答案 0 :(得分:2)

不,你不能。

您可以检查当前阵列中的类型。

Starting upload

答案 1 :(得分:1)

执行此操作的一种方法是在执行任何其他操作之前检查您的数组是否包含bar,如果不包含则停止:

    Array.prototype.foo = function(){
    	if (this.indexOf('bar') === -1) {
    		throw "The array must contain bar";
    	}
    	// do what must be done
      console.log("all good");
    }
    
    var rightOne = ['john', 'jane', 'bar'];
    var wrongOne = ['john', 'jane'];
    
    rightOne.foo();
    wrongOne.foo();
    

答案 2 :(得分:0)

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

let test = ['a', 'b', 'c'];

function decoratedArray(args) {
  let decorated = [...args];
  decorated.print = () => {
    decorated.forEach((arg) => {
      console.log(arg);
    });
  }
  
  return decorated;
}

test = decoratedArray(test);

test.print();

答案 3 :(得分:0)

使用ES6类,您可以继承Array以获取其所有内部方法,并在不修改本机Array原型的情况下向其添加自己的方法。

class Bar {
  constructor(id) {
    this.id = id
  }
}
  
class Foo extends Array {
  constructor(...args) {
    super(...args)
  }
  foo() {
    if (this.some(x => x instanceof Bar === false))
      throw new Error('Foo can only contain Bar instances')
    console.log('All items are Bars')
    return this
  }
}

const pass = new Foo(new Bar(1), new Bar(2))
const fail = new Foo(new Bar(3), new Object)

pass.foo()
fail.foo()