有人可以解释为什么函数没有以第一种方式获取对象的值吗?
我得到了Backbone.View:
var some.view = Backbone.View.extend({
elements = {},
//...
//some init, filling up elements...
//...
stopTask: function() {
// Calling the function with parameters explained later
stopThisTask(...);
}
});
功能:
function stopThisTask(task){
console.log(task);
}
当我以下列方式致电stopThisTask
时,task
参数未定义
stopThisTask(this.elements);
但是,当我这样做时,task
的值为
var tmp = this.elements;
stopThisTask(tmp);
有人可以解释为什么会这样吗? 如果我知道,变量是按值传递的,而obects是通过引用传递的。但是,这是否意味着我在某种程度上放弃了元素对象的引用?
答案 0 :(得分:1)
我怀疑this.elements
在stopThisTask函数中被解析,因此this
将指向stopThisTask
而不是stopThisTask
的调用者。
通过在调用者中显式设置tmp
参数,可以保证使用正确的this
范围。
应该相当于
stopThisTask.call(this, this.elements);