Javascript 区别于;这";和对象名
这两段代码之间有区别吗 由于Javascript 区别于;这";和对象名,javascript,this,Javascript,This,这两段代码之间有区别吗 由于foo是obj的成员函数,这个将引用obj本身(方法调用模式) 1. var obj = {}; obj.prop = some_property; obj.foo = function() { do_something_with(obj.prop); }; var obj = {}; obj.prop = some_property; obj.foo = function() { do_something_with(this.prop); }; 2. v
foo
是obj
的成员函数,这个将引用obj
本身(方法调用模式)
1.
var obj = {};
obj.prop = some_property;
obj.foo = function() {
do_something_with(obj.prop);
};
var obj = {};
obj.prop = some_property;
obj.foo = function() {
do_something_with(this.prop);
};
2.
var obj = {};
obj.prop = some_property;
obj.foo = function() {
do_something_with(obj.prop);
};
var obj = {};
obj.prop = some_property;
obj.foo = function() {
do_something_with(this.prop);
};
我正在开发的一个应用程序在使用approach2时不断崩溃
代码类似于:
obj = {};
obj.listener = {
eventprocess : function(param) {
//some code
}
};
obj.init = function() {
this.a = library_func();
this.a.add_listener(this.listener);
};
当我使用方法1时,它起作用
有什么想法吗?由于obj
和此
的解析延迟到函数执行时,其结果可能会因此
或/和obj
在定义和调用之间是否已更改而有所不同
例如,给定两个相同的对象,除了一个在函数foo
中使用this
和另一个使用obj
:
var objA = {};
objA.prop = "test";
objA.foo = function() {
alert(this.prop);
};
var objB = {};
objB.prop = "test";
objB.foo = function() {
alert(objB.prop);
};
。。。我们将在这里看到不同的行为:
var anotherObject = {
objAFoo: objA.foo,
objBFoo: objB.foo
};
anotherObject.objAFoo(); // "undefined";
anotherObject.objBFoo(); // "test";
请注意,您可以通过使用call()
或apply()
设置this
的值来规范此行为,如注释中所指出:
anotherObject.objAFoo.call(objA); // "test";
但是,也要注意,此
已使用绑定或可能会伤害您的情况。由于obj
和此
的解析延迟到函数执行时,其结果可能会有所不同,这取决于此
或obj
在定义和调用之间是否发生了更改。例如,当使用this
时,执行var bar=obj.foo;bar.foo()
,将中断this
引用,但保留obj
。我建议您阅读一些关于“this”关键字的教程。下面是一个很好的例子。您是否已经在某处声明了属性obj.b
?你的代码不清楚。。。但是如果您没有,并且您也没有声明obj.b
的add\u listener
属性,那么这将导致错误。@guypursey,对不起,这是一个输入错误。它应该是a
。“编辑。@马特,你能写下来作为回答吗?我忽略了这样一个事实,即此
的解析延迟到执行。还值得一提的是,您可以使用调用
方法使objAFoo()
工作(即显示objA.prop
的值,而不是未定义的
)。方法call
允许更改此
,如下所示:另一个对象.objAFoo.call(objA);//“测试”代码>(没有双关语)。@guypursey:谢谢,我已经把它纳入了我的答案中。