创建数组时,我需要一个自动在该数组上调用的函数.我认为这可能会以某种方式使用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
属性集.这可能吗?
提前致谢!
据我所知,这是不可能的,但你可以定义一个懒惰地计算数组是否只包含对象的函数:
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()
,则永远不会进行计算.
归档时间: |
|
查看次数: |
146 次 |
最近记录: |