如何在对象中更改此项
How to change this in object?
本文关键字:对象 更新时间:2023-09-26
如何创建两次方法?我不明白如何在函数体中改变这一点。为什么它不起作用?
function twice() {
var buf = [];
for ( var i = 0; i < this.length; i++ ) {
buf.push(this[i]);
}
for ( var i = 0; i < this.length; i++ ) {
buf.push(this[i]);
}
this = buf;
}
Array.prototype.twice = twice;
a = [1,2,3];
a.twice();
a; // [1,2,3,1,2,3]
我不明白如何在功能体中改变这一点
如果你指的是this
的值,你就不能。但你不必为你正在做的事情
你非常接近,你只是有一点需要删除:
function twice() {
var i, l;
for (l = this.length, i = 0; i < l; ++i) {
this.push(this[i]);
}
}
记住,您的数组是一个对象。要更改其内容,只需更改其内容即可,无需更改对它的引用。
不过,请注意,你可以在任何现代浏览器上使用这个技巧:
function twice() {
this.push.apply(this, this);
}
这是通过使用Function#apply
函数来实现的,该函数调用您对其进行调用的函数(因此,在本例中为push
),使用您给它的第一个参数作为操作对象,使用第二个参数作为传递到该函数(它将其作为数组)的参数。关于MDN和规范的更多信息。碰巧push
允许您向它传递任意数量的参数,并将按顺序推送每个参数。因此,如果您试图第二次将数组的内容添加到数组中,那一行就可以了(在现代浏览器上,一些旧的IE实现不喜欢使用push.apply
)。
不能为this
赋值。这就是规则。但是您可以修改this
的值。尝试将一些值推送到this
中。
function twice() {
var len = this.length;
for (var i = 0; i < len; i++) {
this.push(this[i]);
}
}
Array.prototype.twice = twice;
a = [1, 2, 3];
a.twice();
alert(a);
这是一把小提琴。http://jsfiddle.net/Qvarj/正如你所看到的,大部分逻辑都是你的。
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- Chrome开发工具(如何知道我在调用哪个javascript对象)