是否可以在每次创建数组时执行某个功能?

jon*_*nny 8 javascript arrays

创建数组时,我需要一个自动在该数组上调用的函数.我认为这可能会以某种方式使用Array的原型/构造函数,但我不知道如何解决这个问题.

所以我有一个数组,我初始化:

var arr = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)

现在让我们说我有这样的功能:

Array.prototype.objectArray = function() {
    var result = this.every(function(elem) {
        return typeof elem == "object";
    });
    this.isObjectArray = result;
}
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,调用此数组上的函数会将其isObjectArray参数赋值给false.

但是,我想要的是每次创建一个数组时,此函数都会在数组上运行,因此默认情况下每个数组都有其isObjectArray属性集.这可能吗?

提前致谢!

Cri*_*scu 5

据我所知,这是不可能的,但你可以定义一个懒惰地计算数组是否只包含对象的函数:

Array.prototype.isObjectArray = function () {
  if (typeof(this.__isObjectArray) === 'undefined') {
    this.__isObjectArray = this.every(function(elem) {
      return typeof elem == "object";
    });
  }
  
  return this.__isObjectArray;
};


var a = [1, 2, 3];
var b = [[], {}];

alert("a: " + a.isObjectArray() + ", b: " + b.isObjectArray());
Run Code Online (Sandbox Code Playgroud)

上面的代码只进行一次计算(第一次请求它),并且在后续调用中它只返回已经计算的值.

此外,如果您创建不调用的数组isObjectArray(),则永远不会进行计算.