如何修改"这个"在javascript

时间:2015-06-26 14:57:48

标签: javascript

我发现自己想要重新定义"这个"一整天都很多次。有人可以告诉我如何实现这一点或为什么我不能?

例如:

this = $('div')[0];

为什么我想这样做:与这个'通过函数调用传递引用更自然。 '这'应该引用函数内部的调用对象,例如:

var my_div = $('#some_div');
my_div.click(function(){
    console.log(this);
});

发送到日志的内容是对窗口的引用,而不是调用该函数的div。

我写的每个onchange事件处理程序都被迫采取这个'作为参数,以维护对调用对象的引用。这对我来说似乎已经破裂了

3 个答案:

答案 0 :(得分:3)

您可以使用.call(context[, params]).apply(context[, arguments])执行此操作。例如:

function move(x, y) {
    this.style.left = x + "px";
    this.style.top = y + "px";
};

// now this in move refers to the div element
move.call($('div')[0], 100, 200);

但你不能只覆盖this

答案 1 :(得分:1)

根据您的目的,您可以使用javascript的bind。它修改了函数调用上this关键字的上下文。您可以查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind以获取更多信息,但这是一个简单的示例。

var obj1 = {
    x: 5,
    getX: function() {
        return this.x;
    }
};

var obj2 = {
    x: 7
}

var xVal = obj1.getX(); //this = obj1

var boundedFunc = obj1.getX.bind(obj2); //this = obj2
var boundedXVal = boundedFunc();

console.log(xVal); //prints 5
console.log(boundedXVal); //prints 7

答案 2 :(得分:0)

这主要是我的猜测,因为我不知道你的问题的确切答案,但我相信这是因为每当你使用"这个"你在一个物体里面。您无法更改已经存在的对象,因为这会产生一些不需要的结果。内部的个人事物"这个"很好的想法

this.someVariable = "something else"