这是用javascript编写的
我在javascript中使用“this”时遇到了一个令人困惑的问题。我有一个“get_data”方法,它返回一个对象的某个成员变量。有时它会把物体本身还给我。。。我不知道为什么。有人能解释一下这里发生了什么吗这是用javascript编写的,javascript,Javascript,我在javascript中使用“this”时遇到了一个令人困惑的问题。我有一个“get_data”方法,它返回一个对象的某个成员变量。有时它会把物体本身还给我。。。我不知道为什么。有人能解释一下这里发生了什么吗 function Feed_Item(data) { this.data = data; this.get_data = function() { return this.data; } this.foo = function() { return th
function Feed_Item(data) {
this.data = data;
this.get_data = function() {
return this.data;
}
this.foo = function() {
return this.foo2();
}
this.foo2 = function() {
//here type of this.data() == Feed_Item!!! It should be of type Data
}
this.bar = function() {
//here type of this.data() == Data, as I'd expect
}
}
JavaScript中的“this”取决于调用函数的方式。如果“this”未绑定到对象,则它将是窗口对象 如果你打电话
item = new Feed_Item()
item.foo() //foo will be called with correct 'this'
但是,如果您确实提供了_项(一些_数据),那么您将向全局窗口对象添加几个函数
有很多文章对此进行了解释,例如,JavaScript中的“this”是什么取决于调用函数的方式。如果“this”未绑定到对象,则它将是窗口对象 如果你打电话
item = new Feed_Item()
item.foo() //foo will be called with correct 'this'
但是,如果您确实提供了_项(一些_数据),那么您将向全局窗口对象添加几个函数
有很多文章解释了这一点,例如,这里有一篇解释“这一点”的好博文: 本质上,该的定义是: 该值在调用函数时确定,并设置为调用函数的对象 然而,有时要弄清楚那个物体到底是什么并不容易。这是因为它取决于函数的调用方式。您甚至可以通过调用函数的
call
方法来动态设置该函数的值,例如
window.str = "hello";
var fn = function(){
alert(this.str);
};
fn();
在浏览器控制台中运行此代码会得到hello
,这是全局窗口对象上str
的值,但是如果运行:
fn.call({
str: 'goodbye'
}, []);
您将得到“再见”,因为上下文已更改为传入的对象。一些库,例如JQuery、ExtJS。。。利用此功能使其更易于使用。这里有一篇解释“这一点”的好博文:
本质上,该
的定义是:
该值在调用函数时确定,并设置为调用函数的对象
然而,有时要弄清楚那个物体到底是什么并不容易。这是因为它取决于函数的调用方式。您甚至可以通过调用函数的call
方法来动态设置该函数的值,例如
window.str = "hello";
var fn = function(){
alert(this.str);
};
fn();
在浏览器控制台中运行此代码会得到hello
,这是全局窗口对象上str
的值,但是如果运行:
fn.call({
str: 'goodbye'
}, []);
您将得到“再见”,因为上下文已更改为传入的对象。一些库,例如JQuery、ExtJS。。。利用此功能使其更易于使用。您必须向我们展示调用方法的代码-由于此
依赖于调用,因此可能会产生影响。还有,这个.data()是什么?除了data
参数外,您没有名为data
的函数。data
是函数吗?函数的this关键字的值完全取决于它的调用方式。阅读的答案。你真的需要这个。获取数据()
?你不能直接调用这个数据吗?在Java/C++中,某些属性是私有的,这似乎是您应该做的事情。您必须向我们展示调用方法的代码-因为此
依赖于调用,它可能会产生影响。还有,这个.data()是什么?除了data
参数外,您没有名为data
的函数。data
是函数吗?函数的this关键字的值完全取决于它的调用方式。阅读的答案。你真的需要这个。获取数据()
?你不能直接调用这个数据吗?在Java/C++中,某些属性是私有的,这似乎是您要做的事情。