有人可以解释为什么函数没有以第一方式获得对象的价值吗?
我得到了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);
有人可以解释为什么吗?
如果我知道的话,变量是通过值传递的,而对象是通过引用传递的。但是,这是否意味着以某种方式我会松散对元素对象的引用?
最佳答案
我怀疑在stopThisTask函数内部得到了解析,因此this.elements
将指向this
而不是stopThisTask
的调用方。
通过在调用方中显式设置stopThisTask
参数,可以确保使用正确的tmp
范围。
应该相当于
stopThisTask.call(this, this.elements);