Javascript:是否有任何后门方法可以访问数组的真实隐藏/私有长度属性?
我在第一次会议上了解到数组长度属性是一个facade。它是一个API,而不是保存长度的文本属性。它充当实长度属性的getter/setter:Javascript:是否有任何后门方法可以访问数组的真实隐藏/私有长度属性?,javascript,Javascript,我在第一次会议上了解到数组长度属性是一个facade。它是一个API,而不是保存长度的文本属性。它充当实长度属性的getter/setter: "While the getter of the length property simply returns the number of elements that are contained in the array, the setter can be used to truncate the array." 是否有任何后门方法可以访问数组的真实
"While the getter of the length property simply returns the number of elements that are contained in the array, the setter can be used to truncate the array."
是否有任何后门方法可以访问数组的真实隐藏/私有长度属性?有趣的想法。我相信答案是否定的,你没有访问权限。我可以想象,
Array#length
作为getter实现的原因仅仅是为了定义自定义setter
我可以想象内部结构是这样的:
function FakeArray() {
var _length = 0;
Object.defineProperty(this, 'length', {
get: function() {
return _length;
},
set: function(length) {
// some functionality to chop the array
this.splice(length);
_length = length;
return _length;
}
});
}
好主意。我相信答案是否定的,你没有访问权限。我可以想象,
Array#length
作为getter实现的原因仅仅是为了定义自定义setter
我可以想象内部结构是这样的:
function FakeArray() {
var _length = 0;
Object.defineProperty(this, 'length', {
get: function() {
return _length;
},
set: function(length) {
// some functionality to chop the array
this.splice(length);
_length = length;
return _length;
}
});
}
好主意。我相信答案是否定的,你没有访问权限。我可以想象,
Array#length
作为getter实现的原因仅仅是为了定义自定义setter
我可以想象内部结构是这样的:
function FakeArray() {
var _length = 0;
Object.defineProperty(this, 'length', {
get: function() {
return _length;
},
set: function(length) {
// some functionality to chop the array
this.splice(length);
_length = length;
return _length;
}
});
}
好主意。我相信答案是否定的,你没有访问权限。我可以想象,
Array#length
作为getter实现的原因仅仅是为了定义自定义setter
我可以想象内部结构是这样的:
function FakeArray() {
var _length = 0;
Object.defineProperty(this, 'length', {
get: function() {
return _length;
},
set: function(length) {
// some functionality to chop the array
this.splice(length);
_length = length;
return _length;
}
});
}
您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么 有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:
var x = [0,1,2,3];
x.length = 2;
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效
为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?既然实现了它,它将完全依赖于实现,那么如何使用它呢?您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么 有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:
var x = [0,1,2,3];
x.length = 2;
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效
为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?既然实现了它,它将完全依赖于实现,那么如何使用它呢?您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么 有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:
var x = [0,1,2,3];
x.length = 2;
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效
为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?既然实现了它,它将完全依赖于实现,那么如何使用它呢?您认为Array.prototype.length是一个getter,或者存在任何特殊的隐藏别名的逻辑是什么 有多种方法可以修改数组长度的值(pop、push、shift、unshift等),因此在我看来,虽然可能存在用于赋值的setter,但:
var x = [0,1,2,3];
x.length = 2;
首先创建一个长度为4的数组,然后将其长度设置为2,从而删除最后两个成员,我看不出getter比简单地返回由其他方法更新的长度更有效
为什么要以其他方式实现长度?如果是,那么这个隐藏长度的目的是什么?如果实现了它,它将完全依赖于实现,那么如何使用它呢?为什么?为什么你认为有“真实”属性?谁说有这样的东西?这篇文章暗示array.length只是一个getter方法。这是不真实的吗?它描述的是行为,而不是实现。我想,它实际上是用C代码实现的。无论如何,为什么要这样做?“而getter…只是返回数组中包含的元素数”是不正确的<代码>新数组(10)创建长度为10且成员为零的数组。长度属性比这更复杂。为什么?为什么你认为有“真实”属性?谁说有这样的东西?这篇文章暗示array.length只是一个getter方法。这是不真实的吗?它描述的是行为,而不是实现。我想,它实际上是用C代码实现的。无论如何,为什么要这样做?“而getter…只是返回数组中包含的元素数”是不正确的<代码>新数组(10)创建长度为10且成员为零的数组。长度属性比这更复杂。为什么?为什么你认为有“真实”属性?谁说有这样的东西?这篇文章暗示array.length只是一个getter方法。这是不真实的吗?它描述的是行为,而不是实现。我想,它实际上是用C代码实现的。无论如何,为什么要这样做?“而getter…只是返回数组中包含的元素数”是不正确的<代码>新数组(10)创建长度为10的数组