Javascript扩展了原型,并在中实现了
Javascript extend prototype, and for-in
我尝试向Array原型添加一些我经常使用的新函数。我的问题是,当我向对象的原型添加一些东西,并在我创建的任何新数组(对象)的for in循环中跟踪属性时,那些只添加到原型中的新函数是如何列出的?他们不应该只是在proto中吗?
例如:所以我在原型中添加了一个"第一"的函数。
Array.prototype.first = function() { return this[0]; }
因此,当我现在使用for in循环来迭代数组时,我会得到命名的函数以及数组中的任何其他项。
var array = [1,2,3];
//traces out: 1,3,4,first
for(var i in array) {
console.log(i);
}
这仅仅是由于跟踪和/或使用for在对象上迭代而产生的吗?
Evan是正确的。但是,在用于..时。。在javascript中的语句中,最好测试当前属性是对象的属性,而不是从原型链继承的属性:
for(var attr in obj){
if(obj.hasOwnProperty(attr)){
// first will not appear here
}
}
不应该在循环中使用for来循环数组。
for (var i = 0, len = arr.length; i < len; ++i) {
}
CCD_ 1用于迭代对象的键。
如果您真的需要这样做,请使用
Object.defineProperty(Array.prototype, 'first', {
value: function() { return this[0]; },
enumerable: false
});
但有些人认为这是一种糟糕的做法。三思而后行。
相关文章:
- 在Chrome扩展中实现facebook登录
- 如果或实现类似指令,则扩展ng
- Javascript扩展了原型,并在中实现了
- JavaScript 扩展 Array 以实现 map2
- 什么是实现可拖动分隔符的轻量级脚本/jQuery 扩展
- 为 Firefox 扩展实现一个 Javascript 插件系统
- 如何在固定时间间隔内实现 chrome 扩展弹出桌面通知
- ExtJS 4 - 实现其他人的用户扩展/插件
- 从服务器接收并以chrome扩展实现.js文件
- Chrome扩展-实现通道
- Firefox 扩展错误 - 值未实现接口 WindowProxy 接口
- 如何在RxJS中实现时间到期热可观察(或在反应式扩展中通用)
- 很好的实现了可扩展的JavaScript应用架构(Sandbox by Nicholas Zakas)
- 实现一个Chrome扩展开/关切换按钮
- 如何从php实现的js脚本传递访问令牌到扩展的localStorage
- AngularJS 1.x如何实现API以扩展服务实现
- 如何从Typescript中扩展的类实现方法?
- 如何实现像页面扩展之类的东西
- 实现跨扩展消息传递在chrome扩展和应用程序
- 哪些 ECMAScript 实现扩展了 RegExp 语法