gpt4 book ai didi

javascript - JS原型(prototype)返回原型(prototype)代码

转载 作者:行者123 更新时间:2023-11-29 16:27:14 25 4
gpt4 key购买 nike

Array.prototype.last = function() { if(this.length !=0) return this[this.length-1]; }
myarray = new Array(1,2,3);
for(var i in myarray){
alert(i+'='+myarray[i]);
}

当上面的代码执行时,它会正确地警告每个循环,但最后会弹出另一个警告,其中包含 Array.prototype.last 方法的源代码。

每当我定义任何原型(prototype)方法时都会发生这种情况,但我只是不知道为什么!

因此,我收到以下警报:0=1,1=2,2=3,然后收到以下警报:

last=function () {
if (this.length != 0) {
return this[this.length - 1];
}
}

最佳答案

这是因为 for-in 语句枚举对象属性,包括继承的属性。

这就是为什么对数组或类数组对象使用 for-in 语句被认为是不好的做法的原因之一。

其他原因包括规范不保证枚举的顺序,这意味着索引属性可能不会按数字顺序访问,例如:

var a = [];
a[1] = 'b';
a[0] = 'a'

for (var prop in a) { console.log(i); }

大多数浏览器会检测到您正在尝试迭代数组,并且将按数字顺序访问属性,但在 IE 中,将按创建属性的顺序枚举属性,1,然后0

还知道,for-in 语句可能比简单的顺序循环慢,因为正如您现在所知,它需要内省(introspection)对象的整个原型(prototype)链,以枚举继承的对象成员。

作为一般建议,始终使用顺序循环来迭代此类对象。

另请参阅:

关于javascript - JS原型(prototype)返回原型(prototype)代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4790032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com